pax_global_header00006660000000000000000000000064143345331270014517gustar00rootroot0000000000000052 comment=bd53d2af21b21deb20cfb033d4f3e991f5c61a91 fasta36-36.3.8i_14-Nov-2020/000077500000000000000000000000001433453312700146655ustar00rootroot00000000000000fasta36-36.3.8i_14-Nov-2020/.gitignore000066400000000000000000000000351433453312700166530ustar00rootroot00000000000000bin/ results/ *.o *~ *.annot fasta36-36.3.8i_14-Nov-2020/COPYRIGHT000066400000000000000000000020001433453312700161500ustar00rootroot00000000000000 Copyright (c) 1996, 1997, 1998, 1999, 2002, 2014, 2015 by William R. Pearson and The Rector & Visitors of the University of Virginia */ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under this License is distributed on an "AS IS" BASIS, WITHOUT WRRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. Code in the smith_waterman_sse2.c and smith_waterman_sse2.h files is copyright (c) 2006 by Michael Farrar. Code in the global_sse2.c, global_sse2.h, glocal_sse2.c, and glocal_sse2.h files is copyright (c) 2010 by Michael Farrar. This code has been released under the BSD open source license, see COPYRIGHT.sse2. fasta36-36.3.8i_14-Nov-2020/COPYRIGHT.sse2000066400000000000000000000037721433453312700170440ustar00rootroot00000000000000 COPYRIGHT.sse2 The source code in the following files: smith_waterman_sse2.c smith_waterman_sse2.h is Copyright 2006 by Michael Farrar. The source code in the files: global_sse2.c global_sse2.h glocal_sse2.c glocal_sse2.h is Copyright 2010 by Michael Farrar. This code is freely distributed under the BSD open source 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. 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. ----- For information, please contact Sean Eddy (sean@eddylab.org). Farrar's original swsse2 source code was distributed under a noncommercial, non-open-source license. Farrar died in 2010 while he was working as a senior software engineer in my laboratory. With permission from his wife Annalee, I have relicensed his code and made it available under an open source license, so it can be used freely in the research community. SRE, 10 March 2019. fasta36-36.3.8i_14-Nov-2020/FASTA_LIST000066400000000000000000000010431433453312700162770ustar00rootroot00000000000000 4 Aug 2010 If you regularly install the latest version of the FASTA package from http://faculty.virginia.edu/wrpearson/fasta, you may want to join the fasta_list SYMPA mailing list. I use this list to announce new releases and solicit bug reports. To join the mailing list, go to the WWW page at: lists.virginia.edu/sympa/info/fasta_list Select the "Subscribe" option on the lower left, and at the linked page, enter your email address, and click "submit". You will be asked to confirm your membership in the mailing list. Bill Pearson fasta36-36.3.8i_14-Nov-2020/LICENSE000066400000000000000000000260751433453312700157040ustar00rootroot00000000000000Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright {yyyy} {name of copyright owner} Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. fasta36-36.3.8i_14-Nov-2020/README000066400000000000000000000055461433453312700155570ustar00rootroot00000000000000 [This file has been replaced by README.md] December, 2017 The most up-to-date version information on FASTA versions is available in README.md and doc/readme.v36 . July, 2015 This version of the FASTA programs is fasta-36.3.8. Since March, 2011 (fasta-36.3.4), the FASTA programs are no longer interactive. Typing bin/fasta36 (or any of the other programs) provides a help message. The "classic" interactive mode is available by typing "fasta36 -I". In addition, there is only one version of the programs, "fasta36", "ssearch36", etc., which is threaded by default on Unix/Linux/MacOSX. As of November, 2014, the FASTA program code is avaiable under the Apache 2.0 open source license. Up to date release notes are available in the file doc/readme.v36 Documentation on the fasta3 version programs is available in the files: doc/fasta36.1 (unix man page) doc/changes_v36.html (short descriptions of enhancements to FASTA programs) doc/readme.v36 (text descriptions of bug fixes and version history) doc/fasta_guide.tex (Latex file which describes fasta-36, and provides an introduction to the FASTA programs, their use and installation.) doc/fasta_guide.pdf (printable/viewable description of fasta-36) The latter two files provide background information on installing the fasta programs (in particular, the FASTLIBS file), that new users of the fasta3 package may find useful. ================================================================ The FASTA distribution directories (this directory) has been substantially re-organized to make it easier to find things. However, some documentation has not yet been completely updated to reflect the re-organization, so some things may not make sense. Files can now be found in several sub-directories bin/ (pre-compiled binaries for some architectures) conf/ example fastlibs files data/ scoring matrices doc/ documentation files make/ make files misc/ perl scripts to reformat -m 9 output, convert -R search.res files for 'R', and embed domains in shuffled sequences scripts/ perl scripts for -V (annotate alignments) and -E (expand library) options seq/ test sequences src/ source code sql/ sql files and scripts for using the sql database access test/ test scripts For some binary distributions, only the doc/, data/, seq/, and bin/, directories are provided. ================ To make the standard FASTA programs: cd src make -f ../make/Makefile.linux_sse2 all where "../make/Makefile.linux_sse2" is the appropriate file for your system. The executable programs will then be found in ../bin (e.g. ../bin/fasta36, etc.) For a simple test of a program, try (from the src directory) ../bin/fasta36 -q ../seq/mgstm1.aa ../seq/prot_test.lseg ================================================================ Bill Pearson wrp@virginia.edu fasta36-36.3.8i_14-Nov-2020/README.md000066400000000000000000000271651433453312700161570ustar00rootroot00000000000000 ## The FASTA package - protein and DNA sequence similarity searching and alignment programs This directory contains the source code for the FASTA package of programs (W. R. Pearson and D. J. Lipman (1988), "Improved Tools for Biological Sequence Analysis", *PNAS 85:2444-2448*). The current verion of the program is `fasta-36.3.8i`. If you are reading this at [fasta.bioch.virginia.edu/wrpearson/fasta/fasta36](https://fasta.bioch.virginia.edu/wrpearson/fasta/fasta36), links are available to executable binaries for Linux, MacOS, and Windows. The source code is also available from [github.com/wrpearson/fasta36](https://github.com/wrpearson/fasta36). The FASTA package offers many of the same programs as `BLAST`, but takes a different approach to statistical estimates, and provides additional optimal programs for local (`ssearch36`) and global (`ggsearch36`, `glsearch36`) alignment, and for non-overlapping internal local alignments (`lalign36`). The programs available include:

FASTA BLAST description

fasta36 blastp/blastn Protein and DNA local similarity search
ssearch36 optimal Smith-Waterman search -- vectorized on Intel and Arm architectures
ggsearch36 optimal global Needleman-Wunsche search -- vectorized on Intel and Arm architectures
glsearch36 optimal global(query)/local (library) search -- vectorized on Intel and Arm architectures
fastx36 / fasty36 blastx DNA query search against protein sequence database. (fasty36 uses a slower, more sophisticated frame shift aligner)
tfastx36 / tfasty36 tblastn protein query search against DNA database

fastf36 / tfastf36 compares an ordered peptide mixture against a protein (fastf36) or DNA (tfastf36) database
fastm36 / tfastm36 compares a set of ordered peptide against a protein (fastf36) or DNA (tfastf36) database or oligonucleotides against a DNA database
fasts36 / tfasts36 compares an unordered set of peptides against a protein (fasts36) or DNA (tfasts36) database

lalign36 look for non-overlapping internal alignments, similar to a "dot-plot," but with statistical signficance

Changes in **fasta-36.3.8i** Nov, 2022 1. bug fix to remove duplicate variant annotations 2. update to scripts/get_protein.py and annotation scripts. 3. modify code to reduce mktemp compilation warning messages 4. changes to annotation scripts for Pfam shutdown; new ann_pfam_www.py, ann_pfam_sql.py Changes in **fasta-36.3.8i** Sept, 2021 1. Enable translation table -t 9 for Echinoderms. This bug has existed since alternate translation tables were first made available. Changes in **fasta-36.3.8i** May, 2021 1. Add an option, -Xg, that preserves the gi|12345 string the score summary and alignment output. Changes in **fasta-36.3.8i** Nov, 2020 1. fasta-36.3.8i (November, 2020) incorporates the SIMDe (SIMD-everywhere, https://github.com/simd-everywhere/simde/blob/master/simde/x86/sse2.h) macro definitions that allow the smith\_waterman\_sse2.c, global\_sse2.c, and glocal\_sse2.c code to be compiled on non-Intel architectures (currently tested on ARM/NEON). Many thanks to Michael R. Crusoe (https://orcid.org/0000-0002-2961-9670) for the SIMDE code converstion, and to Evan Nemerson for creating SIMDe. 2. The code to read FASTA format sequence files now ignores lines with '#' at the beginning, for compatibility with PSI Extended FASTA Format (PEFF) files (http://www.psidev.info/peff). Changes in **fasta-36.3.8h** May, 2020 1. fasta-36.3.8h (May 2020) fixes a bug that appeared when multiple query sequences were searched against a large library that would not fit in memory. In that case, the number of library sequences and residues increased by the library size with each new search. 2. More consistent formats for **ERROR** and **Warning** messages. 3. Corrections to code to address compiler warnings with gcc8/9. 4. addition of 's' option to show similarity in -m8CBls (or -m8CBs, -m8CBsl) and 'd' option to show raw (unaligned) domain information. Changes in **fasta-36.3.8h** February, 2020 1. The license for Michael Farrar's Smith-Waterman sse2 code and global/glocal sse2 code is now open source (BSD), see COPYRIGHT.sse2 for details. Changes in **fasta-36.3.8h** August, 2019 1. Modifications to support makeblastdb format v5 databases. Currently, only simple database reads have been tested. Changes in **fasta-36.3.8h** March, 2019 1. Translation table 1 (`-t 1`) now translates 'TGA'->'U' (selenocysteine). 2. New script for extracting DNA sequences from genomes (`scripts/get_genome_seq.py`). Currently works with human (hg38), mouse (mm10), and rat (rn6). Changes in **fasta-36.3.8h** January, 2019 1. Bug fixes: `fastx`/`tfastx` searches done with the `-t t` option (which adds a `*` to protein sequences so that termination codons can be matched), did not work properly with the `VT` series of matrices, particularly `VT10`. This has been fixed. 2. New features: Both query and library/subject sequences can be generated by specifying a program script, either by putting a `!` at the start of the query/subject file name, or by specifying library type `9`. Thus, `fasta36 \\!../scripts/get_protein.py+P09488+P30711 /seqlib/swissprot.fa` or `fasta36 "../scripts/get_protein.py+P09488+P30711 9" /seqlib/swissprot.fa` will compare two query sequences, `P09488` and `P30711`, to SwissProt, by downloading them from Uniprot using the `get_protein.py` script (which can download sequences using either Uniprot or RefSeq protein accessions). Often, the leading `!` must be escaped from shell interpretation with `\\!`. New scripts that return FASTA sequences using accessions or genome coordinates are available in `scripts/`. `get_protein.py`, `get_uniprot.py`, `get_up_prot_iso_sql.py` and `get_refseq.py`. `get_refseq.py` can download either protein or mRNA RefSeq entries. `get_up_prot_iso_sql.py` retrieves a protein and its isoforms from a MySQL database. `get_genome_seq.py` extracts genome sequences using coordinates from local reference genomes (`hg38` and `mm10` included by default). Changes in **fasta-36.3.8h** December, 2018 The `scripts/ann_exons_up_www.pl` and `ann_exons_up_sql.pl` now include the option `--gen_coord` which provides the associated genome coordinate (including chromosome) as a feature, indicated by `'<'` (start of exon) and `'>'` (end of exon). Changes in **fasta-36.3.8h** released November, 2018 **fasta-36.3.8h** provides new scripts and modifications to the `fasta` programs that normalize the process of merging sub-alignment scores and region information into both FASTA and BLAST results. To move BLASTP towards FASTA with respect to alignment annotation and sub-alignment scoring: 1. The `blastp_annot_cmd.sh` runs a blast search, finds and scores domain information for the alignments, and merges this information back into the blast output `.html` file. This script uses: 1. `annot_blast_btab2.pl --query query.file --ann_script annot_script.pl --q_ann_script annot_script.pl blast.btab_file > blast.btab_file_ann` (a blast tabular file with one or two new fields, an annotation field and (optionally with --dom_info) a raw domain content field. 2. `merge_blast_btab.pl --btab blast.btab_file_ann blast.html > blast_ann.html` (merge the annotations and domain content information in the `blast.btab_file_ann` file together with the standard blast output file to produce annotated alignments. 3. In addition, `rename_exons.py` is available to rename exons (later other domains) in the subject sequences to match the exon labeling in the aligned query sequence. 4. `relabel_domains.py` can be used to adjust color sets for homologous domains. 2. There is also an equivalent `fasta_annot_cmd.sh` script that provides similar funtionality for the FASTA programs. This script does not need to use `annot_blast_btab2.pl` to produce domain subalignment scores (that functionality is provided in FASTA), but it also can use `merge_fasta_btab.pl` and `rename_exons.py` to modify the names of the aligned exons/domains in the subject sequences. 3. To support the independence of the `blastp`/`fasta` output from html annotation, the FASTA package includes some new options: 1. The `-m 8CBL` option includes query sequence length and subject sequence length in the blast tabular output. In addition, if domain annotations are available, the raw domain coordinates are provided in an additional field after the annotation/subalignment scoring field. `-m 8CBl` provides the sequence lengths, but does not add the raw domain coordinates. 2. The `-Xa` option prevents annotation information from being included in the html output -- it is only available in the `-m 8CB` (or `-m 8CBL/l`) output 3. To reduce problems with spaces in script arguements, annotation scripts with spaces separating arguments can use '+' instead of ' '. 4. The `fasta_annot_cmd.sh` script produces both a conventional alignment on `stdout` and a `-m 8CBL` alignment, which is sent to a separate file, which is separated from the `-m F8CBL` option with a `=`, thus `-m F8CBL=tmp_output.blast_tab`. Changes in **fasta-36.3.8g** released 23-Oct-2018 1. (Oct. 2018) Improvements to scripts in the `psisearch2/` directory: 1. `psisearch2/m89_btop_msa2.pl` 1. the `--clustal` option produces a "CLUSTALW (1.8)", which is required for some downstream programs 2. the `--trunc_acc` option removes the database and accession from identifiers of the form: `sp|P09488|GSTM1_HUMAN` to produce `GSTM1_HUMAN`. 3. the `--min_align` option specifies the fraction of the query sequence that must be aligned `(q_end-q_start+1)/q_length)` Together, these changes make it possible for the output of `m89_btop_msa2.pl` to be used by the EMBOSS program `fprotdist`. 2. A more general implementation of `psisearch2_msa_iter.sh`, which does `psisearch2` one iteration at a time, and a new equivalent `psisearch2_msa_iter_bl.sh`, which uses `psiblast` to do the search. * (Oct. 2018) A small restructuring of the `make/Makefiles` to remove the `-lz` dependence for non-debugging scripts (and add it back when -DDEBUG is used). Changes in **fasta-36.3.8g** released 5-Aug-2018 1. (Apr 2018) incorporation of `-t t1` termination codes ("*") in `-m 8CB`, `-m 8CC`, and `-m9C` so that aligned termination codons are indicated as `**` (`-m8CB`) or `*1` (`-m8CC`, `-m9C`). 2. (Mar 2018) Updates to scripts/annot_blast_btop2.pl to provide subalignment scoring for blastp searches (BLOSUM62 only). (see doc/readme.v36) 3. (Feb. 2018) a new extended option, `-XB`, which causes percent identity, percent similarity, and alignment length to be calculated using the BLAST model, which does not count gaps in the alignment length. see readme.v36 for other bug fixes. Changes in **fasta-36.3.8g** released 31-Dec-2017 1. (December, 2017) -- Make statistical thresholds more robust for small E()-values with normally distributed scores (`ggsearch36`,`glsearch36`). 2. (September, 2017) Treat lower-case queries with no upper-case residues as uppercase with `-S` option. 3. (May, 2017) Improvements/fixes to sub-alignment scoring strategies. 4. Improvements/fixes to psisearch2 scripts. For more detailed information, see `doc/readme.v36`. fasta36-36.3.8i_14-Nov-2020/bin/000077500000000000000000000000001433453312700154355ustar00rootroot00000000000000fasta36-36.3.8i_14-Nov-2020/bin/README000066400000000000000000000000751433453312700163170ustar00rootroot00000000000000Placeholder file to create destination for program binaries. fasta36-36.3.8i_14-Nov-2020/conf/000077500000000000000000000000001433453312700156125ustar00rootroot00000000000000fasta36-36.3.8i_14-Nov-2020/conf/README000066400000000000000000000013211433453312700164670ustar00rootroot00000000000000 22-Jan-2014 fasta36/conf ================ Files that allow FASTA programs to find libraries using abbreviations. For example, if the fast_libs_e.www has the line: Swissprot (NCBI)$0Q${SLIB2}/fa_dbs/swissprot.lseg and export SLIB2=/slib2 then: fasta36 ../seq/mgstm1.aa q is equivalent to: fasta36 ../seq/mgstm1.aa /slib2/fa_dbs/swissprot.lseg ================ fastlibs -- the original library abbreviation file fast_new -- allows abbreviations longer than one letter by using "+abbrev+" NBRF PIR1 Annotated Protein Database (rel 56)$0+pir1+/slib2/fa_dbs/pir1.lseg fast_libs_e.www -- use environment variables in library file name (+long+ abbreviations and ${SLIB2} environment variables can be combined) fasta36-36.3.8i_14-Nov-2020/conf/fast_libs_e.www000066400000000000000000000022631433453312700206350ustar00rootroot00000000000000PIR1 Annotated (rel. 66) $0A${SLIB2}/fa_dbs/pir1.lseg Swissprot (NCBI)$0Q${SLIB2}/fa_dbs/swissprot.lseg NCBI Refseq NP only$0P${SLIB2}/fa_dbs/refseq_np.lseg NCBI Refseq proteins$0S${SLIB2}/fa_dbs/refseq_protein.lseg NCBI PDB structures$0D${SLIB2}/fa_dbs/pdbaa.lseg NCBI NR non-redundant$0N${SLIB2}/fa_dbs/nr.lseg Human/Refseq proteins$0H${SLIB2}/genomes/hum_refseq.lseg Mouse/Refseq proteins$0M${SLIB2}/genomes/mus_refseq.lseg Rat/Refseq proteins$0R${SLIB2}/genomes/rat_refseq.lseg Drosophila/RefSeq proteins$0F${SLIB2}/genomes/d_melanogaster.lseg C. elegans/RefSeq proteins$0W${SLIB2}/genomes/c_elegans.lseg Arabidopsis/RefSeq proteins$0L${SLIB2}/genomes/a_thaliana.lseg Yeast (S. cerevisiae)${SLIB2}/genomes/s_cerevisiae.lseg E. coli proteins$0E${SLIB2}/genomes/ecoli_k12.lseg GB170.0 Primate$1P@${RDLIB2}/gb_asn/gbpri.nam GB170.0 Rodent$1R@${RDLIB2}/gb_asn/gbrod.nam GB170.0 other Mammal$1M@${RDLIB2}/gb_asn/gbmam.nam GB170.0 verteBrates$1B@${RDLIB2}/gb_asn/gbvrt.nam GB170.0 Invertebrates$1I@${RDLIB2}/gb_asn/gbinv.nam GB170.0 Bacteria$1T@${RDLIB2}/gb_asn/gbbct.nam GB170.0 pLants$1L@${RDLIB2}/gb_asn/gbpln.nam GB171.0 Viral$1V@${RDLIB2}/gb_asn/gbvrl.nam GB171.0 Phage$1G@${RDLIB2}/gb_asn/gbphg.nam fasta36-36.3.8i_14-Nov-2020/conf/fast_new000066400000000000000000000036621433453312700173520ustar00rootroot00000000000000NBRF PIR1 Annotated Protein Database (rel 56)$0+pir1+/slib2/fa_dbs/pir1.lseg NBRF Protein database (complete)$0+nbrf+@/seqlib/lib/NBRF.nam NRL_3d structure database$0D/seqlib/lib/nrl_3d.seq 5 NCBI/Blast non-redundant proteins$0+nr+/slib2/fa_dbs/nr.lseg NCBI/Blast Swissprot$0+sp+/slib2/fa_dbs/swissprot.lseg GENPEPT Translated Protein Database (rel 106.0)$0G/slib2/fa_dbs/genpept.fsa Swiss-Prot Release 34$0S/slib0/lib/swiss.seq 5 Yeast proteins$0Y/slib0/genomes/yeast_nr.pep C. elegans blast server$0W/slib2/fa_dbs/C.elegans_blast.fa E. coli proteome$0E/slib0/genomes/ecoli.npep H. influenzae proteome$0I/slib0/genomes/hinf.npep H. pylori proteome$0L/slib0/genomes/hpyl.npep NCBI Entrez Human proteins$0H/slib2/fa_dbs/human.aa M. pneumococcus proteome$0M/slib0/genomes/mpneu.npep M. jannaschii proteome$0J/slib0/genomes/mjan.npep Synechosystis proteome$0C/slib0/genomes/synecho.npep GB108.0 Invertebrates$1I/seqlib2/gcggenbank/gb_in.seq 6 GB108.0 Bacteria$1T@/slib0/lib/gb_ba.nam 6 GB108.0 Primate$1P@/slib0/lib/gb_pri.nam GB108.0 Rodent$1R/seqlib2/gcggenbank/gb_ro.seq 6 GB108.0 other Mammal$1M/seqlib2/gcggenbank/gb_om.seq 6 GB108.0 verteBrates$1B/seqlib2/gcggenbank/gb_ov.seq 6 GB108.0 Expressed Seq. Tags$1E@/slib0/lib/gb_est.nam GB108.0 High throughput genmomic$1h/seqlib2/gcggenbank/gb_htg.seq 6 GB108.0 pLants$1L@/slib0/lib/gb_pl.nam 6 GB108.0 genome Survey sequences$1S@/slib0/lib/gb_gss.nam 6 GB108.0 Viral$1V/seqlib2/gcggenbank/gb_vi.seq 6 GB108.0 Phage$1G/seqlib2/gcggenbank/gb_ph.seq 6 GB108.0 Unannotated$1D/seqlib2/gcggenbank/gb_un.seq 6 GB108.0 New$1u/seqlib2/gcggenbank/gb_new.seq 6 GB108.0 All sequences (long)$1A@/slib0/lib/genbank.nam Yeast genome$1Y@/seqlib/yeast/yeast_chr.nam E. coli genome$1D/slib0/genomes/ecoli.gbk 1 Blast Human ESTs$1F/slib2/fa_dbs/est_human TIGR Human Gene Index$1K/slib2/fa_dbs/HGI.nr.031898 Blast Mouse ESTs$1C/slib2/fa_dbs/est_mouse TIGR Mouse Gene Index$1J/slib2/fa_dbs/MGI.nr.022498 NCBI/BLAST NR DNA$1n/slib2/fa_dbs/nt fasta36-36.3.8i_14-Nov-2020/conf/fastlibs000066400000000000000000000042121433453312700173430ustar00rootroot00000000000000NBRF PIR1 Annotated Protein Database (rel 56)$0A/seqlib/lib/pir1.seq 5 NBRF PIR1 Annotated (seg) (rel 56)$0B/slib2/fa_dbs/pir1.seg NBRF Protein database (complete)$0P@/seqlib/lib/NBRF.nam NRL_3d structure database$0D/seqlib/lib/nrl_3d.seq 5 NCBI/Blast non-redundant proteins$0N/slib2/fa_dbs/nr NCBI/Blast non-redundant proteins (seg)$0K/slib2/fa_dbs/nr.seg NCBI/Blast Swissprot$0Q/slib2/fa_dbs/swissprot NCBI/Blast Swissprot (seg)$0R/slib2/fa_dbs/swissprot.seg OWL 30.1 non-redundant protein database$0O/slib2/OWL/owl.seq 5 GENPEPT Translated Protein Database (rel 106.0)$0G/slib2/fa_dbs/genpept.fsa Swiss-Prot Release 34$0S/slib0/lib/swiss.seq 5 Yeast proteins$0Y/slib0/genomes/yeast_nr.pep C. elegans blast server$0W/slib2/fa_dbs/C.elegans_blast.fa E. coli proteome$0E/slib0/genomes/ecoli.npep H. influenzae proteome$0I/slib0/genomes/hinf.npep H. pylori proteome$0L/slib0/genomes/hpyl.npep NCBI Entrez Human proteins$0H/slib2/fa_dbs/human.aa M. pneumococcus proteome$0M/slib0/genomes/mpneu.npep M. jannaschii proteome$0J/slib0/genomes/mjan.npep Synechosystis proteome$0C/slib0/genomes/synecho.npep GB108.0 Invertebrates$1I/seqlib2/gcggenbank/gb_in.seq 6 GB108.0 Bacteria$1T@/slib0/lib/gb_ba.nam 6 GB108.0 Primate$1P@/slib0/lib/gb_pri.nam GB108.0 Rodent$1R/seqlib2/gcggenbank/gb_ro.seq 6 GB108.0 other Mammal$1M/seqlib2/gcggenbank/gb_om.seq 6 GB108.0 verteBrates$1B/seqlib2/gcggenbank/gb_ov.seq 6 GB108.0 Expressed Seq. Tags$1E@/slib0/lib/gb_est.nam GB108.0 High throughput genmomic$1h/seqlib2/gcggenbank/gb_htg.seq 6 GB108.0 pLants$1L@/slib0/lib/gb_pl.nam 6 GB108.0 genome Survey sequences$1S@/slib0/lib/gb_gss.nam 6 GB108.0 Viral$1V/seqlib2/gcggenbank/gb_vi.seq 6 GB108.0 Phage$1G/seqlib2/gcggenbank/gb_ph.seq 6 GB108.0 Unannotated$1D/seqlib2/gcggenbank/gb_un.seq 6 GB108.0 New$1u/seqlib2/gcggenbank/gb_new.seq 6 GB108.0 All sequences (long)$1A@/slib0/lib/genbank.nam Yeast genome$1Y@/seqlib/yeast/yeast_chr.nam E. coli genome$1D/slib0/genomes/ecoli.gbk 1 Blast Human ESTs$1F/slib2/fa_dbs/est_human TIGR Human Gene Index$1K/slib2/fa_dbs/HGI.nr.031898 Blast Mouse ESTs$1C/slib2/fa_dbs/est_mouse TIGR Mouse Gene Index$1J/slib2/fa_dbs/MGI.nr.022498 NCBI/BLAST NR DNA$1n/slib2/fa_dbs/nt fasta36-36.3.8i_14-Nov-2020/data/000077500000000000000000000000001433453312700155765ustar00rootroot00000000000000fasta36-36.3.8i_14-Nov-2020/data/VTML_10.mat000066400000000000000000000053141433453312700173660ustar00rootroot00000000000000# # VTML_10 # # This matrix was produced from: vtml_10qij.mat using vtml_P.mat background frequencies # # VTML_10 substitution matrix, Units = bits/2.0 # Expected score = -3.896435 bits; Entropy = 3.467957 bits # Target fraction identity = 0.9105 # Lowest Score = -20, Highest Score= 12 # A R N D C Q E G H I L K M F P S T W Y V B Z X * A 7 -8 -8 -8 -5 -7 -7 -6 -9 -9 -9 -8 -7 -10 -6 -4 -5 -11 -10 -5 -8 -7 0 -7 R -8 8 -7 -16 -9 -4 -14 -9 -5 -10 -10 -2 -8 -12 -9 -8 -8 -10 -9 -11 -11 -9 0 -7 N -8 -7 9 -3 -10 -5 -7 -7 -4 -11 -11 -5 -9 -12 -10 -4 -5 -12 -8 -11 3 -6 0 -7 D -8 -16 -3 8 -18 -6 -3 -8 -6 -15 -19 -7 -11 -20 -8 -7 -8 -12 -17 -11 2 -4 0 -7 C -5 -9 -10 -18 12 -17 -18 -9 -8 -7 -16 -17 -6 -17 -11 -5 -7 -19 -6 -5 -14 -17 0 -7 Q -7 -4 -5 -6 -17 9 -3 -10 -3 -12 -8 -4 -6 -10 -7 -6 -7 -19 -16 -9 -5 3 0 -7 E -7 -14 -7 -3 -18 -3 8 -8 -8 -12 -10 -4 -10 -18 -8 -6 -7 -20 -9 -9 -5 2 0 -7 G -6 -9 -7 -8 -9 -10 -8 7 -9 -19 -13 -9 -12 -13 -10 -6 -10 -11 -12 -12 -7 -9 0 -7 H -9 -5 -4 -6 -8 -3 -8 -9 10 -11 -9 -7 -16 -7 -8 -6 -7 -8 -3 -10 -5 -5 0 -7 I -9 -10 -11 -15 -7 -12 -12 -19 -11 8 -3 -11 -3 -7 -13 -11 -7 -8 -10 -1 -13 -12 0 -7 L -9 -10 -11 -19 -16 -8 -10 -13 -9 -3 7 -10 -2 -5 -9 -10 -9 -8 -8 -5 -15 -9 0 -7 K -8 -2 -5 -7 -17 -4 -4 -9 -7 -11 -10 8 -7 -18 -8 -7 -6 -10 -10 -10 -6 -4 0 -7 M -7 -8 -9 -11 -6 -6 -10 -12 -16 -3 -2 -7 10 -4 -12 -10 -6 -16 -15 -5 -10 -8 0 -7 F -10 -12 -12 -20 -17 -10 -18 -13 -7 -7 -5 -18 -4 9 -11 -9 -10 -5 -1 -8 -16 -14 0 -7 P -6 -9 -10 -8 -11 -7 -8 -10 -8 -13 -9 -8 -12 -11 9 -6 -8 -11 -19 -9 -9 -7 0 -7 S -4 -8 -4 -7 -5 -6 -6 -6 -6 -11 -10 -7 -10 -9 -6 8 -3 -10 -8 -10 -5 -6 0 -7 T -5 -8 -5 -8 -7 -7 -7 -10 -7 -7 -9 -6 -6 -10 -8 -3 8 -19 -10 -6 -6 -7 0 -7 W -11 -10 -12 -12 -19 -19 -20 -11 -8 -8 -8 -10 -16 -5 -11 -10 -19 12 -4 -17 -12 -19 0 -7 Y -10 -9 -8 -17 -6 -16 -9 -12 -3 -10 -8 -10 -15 -1 -19 -8 -10 -4 10 -10 -12 -12 0 -7 V -5 -11 -11 -11 -5 -9 -9 -12 -10 -1 -5 -10 -5 -8 -9 -10 -6 -17 -10 7 -11 -9 0 -7 B -8 -11 3 2 -14 -5 -5 -7 -5 -13 -15 -6 -10 -16 -9 -5 -6 -12 -12 -11 8 -4 0 -7 Z -7 -9 -6 -4 -17 3 2 -9 -5 -12 -9 -4 -8 -14 -7 -6 -7 -19 -12 -9 -4 8 0 -7 X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 -7 * -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 1 fasta36-36.3.8i_14-Nov-2020/data/VTML_120.mat000066400000000000000000000047641433453312700174600ustar00rootroot00000000000000# # VTML_120 # # This matrix was produced from: vtml_120qij.mat using vtml_P.mat background frequencies # # VTML_120 substitution matrix, Units = bits/2.0 # Expected score = -0.712191 bits; Entropy = 0.933608 bits # Target fraction identity = 0.3740 # Lowest Score = -7, Highest Score= 11 # 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 -2 -1 -1 0 -1 -1 0 -2 -2 -2 -1 -1 -3 -1 1 0 -4 -3 0 -1 -1 0 R -2 6 -1 -3 -3 1 -2 -3 0 -4 -3 3 -2 -4 -2 -1 -2 -3 -3 -3 -2 0 0 N -1 -1 6 2 -3 0 0 -1 1 -4 -4 0 -3 -4 -2 1 0 -5 -2 -3 4 0 0 D -1 -3 2 6 -5 0 2 -1 -1 -5 -6 -1 -4 -7 -2 -1 -1 -6 -5 -4 4 1 0 C 0 -3 -3 -5 10 -4 -5 -2 -2 -1 -4 -4 -1 -4 -3 0 -1 -6 -1 0 -4 -4 0 Q -1 1 0 0 -4 5 2 -2 1 -3 -2 1 -1 -3 -1 -1 -1 -6 -4 -2 0 3 0 E -1 -2 0 2 -5 2 5 -2 -1 -4 -4 1 -3 -5 -2 -1 -1 -6 -3 -3 1 3 0 G 0 -3 -1 -1 -2 -2 -2 6 -2 -6 -5 -2 -4 -5 -3 -1 -2 -4 -5 -4 -1 -2 0 H -2 0 1 -1 -2 1 -1 -2 7 -3 -2 -1 -3 -1 -2 -1 -1 -2 2 -3 0 0 0 I -2 -4 -4 -5 -1 -3 -4 -6 -3 5 2 -3 2 0 -4 -3 -1 -2 -2 3 -4 -3 0 L -2 -3 -4 -6 -4 -2 -4 -5 -2 2 5 -3 2 1 -3 -3 -2 -2 -1 1 -5 -3 0 K -1 3 0 -1 -4 1 1 -2 -1 -3 -3 5 -2 -5 -1 -1 -1 -4 -3 -3 0 1 0 M -1 -2 -3 -4 -1 -1 -3 -4 -3 2 2 -2 7 1 -4 -3 -1 -4 -3 1 -3 -2 0 F -3 -4 -4 -7 -4 -3 -5 -5 -1 0 1 -5 1 7 -4 -3 -3 1 4 -1 -5 -4 0 P -1 -2 -2 -2 -3 -1 -2 -3 -2 -4 -3 -1 -4 -4 7 0 -1 -4 -5 -3 -2 -1 0 S 1 -1 1 -1 0 -1 -1 -1 -1 -3 -3 -1 -3 -3 0 4 2 -3 -2 -2 0 -1 0 T 0 -2 0 -1 -1 -1 -1 -2 -1 -1 -2 -1 -1 -3 -1 2 5 -6 -3 0 0 -1 0 W -4 -3 -5 -6 -6 -6 -6 -4 -2 -2 -2 -4 -4 1 -4 -3 -6 11 2 -4 -5 -6 0 Y -3 -3 -2 -5 -1 -4 -3 -5 2 -2 -1 -3 -3 4 -5 -2 -3 2 7 -3 -3 -3 0 V 0 -3 -3 -4 0 -2 -3 -4 -3 3 1 -3 1 -1 -3 -2 0 -4 -3 4 -3 -2 0 B -1 -2 4 4 -4 0 1 -1 0 -4 -5 0 -3 -5 -2 0 0 -5 -3 -3 6 1 0 Z -1 0 0 1 -4 3 3 -2 0 -3 -3 1 -2 -4 -1 -1 -1 -6 -3 -2 1 5 0 X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 fasta36-36.3.8i_14-Nov-2020/data/VTML_160.mat000066400000000000000000000047641433453312700174640ustar00rootroot00000000000000# # VTML_160 # # This matrix was produced from: vtml_160qij.mat using vtml_P.mat background frequencies # # VTML_160 substitution matrix, Units = bits/3.0 # Expected score = -0.493659 bits; Entropy = 0.617215 bits # Target fraction identity = 0.2884 # Lowest Score = -8, Highest Score= 16 # A R N D C Q E G H I L K M F P S T W Y V B Z X A 5 -2 -1 -1 1 -1 -1 0 -2 -2 -2 -1 -1 -3 0 1 1 -5 -4 0 -1 -1 0 R -2 8 -1 -3 -3 2 -2 -3 1 -4 -4 4 -2 -5 -2 -1 -2 -4 -3 -4 -2 0 0 N -1 -1 7 3 -3 0 0 0 1 -5 -5 0 -3 -5 -2 1 0 -6 -2 -4 5 0 0 D -1 -3 3 8 -6 0 3 -1 0 -6 -7 0 -5 -8 -2 0 -1 -7 -6 -5 5 1 0 C 1 -3 -3 -6 13 -5 -5 -3 -2 -1 -4 -5 -1 -4 -4 1 -1 -7 -1 1 -4 -5 0 Q -1 2 0 0 -5 6 3 -3 2 -4 -3 2 -1 -4 -1 0 -1 -7 -4 -3 0 4 0 E -1 -2 0 3 -5 3 6 -2 -1 -5 -4 1 -4 -6 -1 0 -1 -8 -4 -3 1 4 0 G 0 -3 0 -1 -3 -3 -2 8 -3 -7 -7 -3 -5 -6 -3 0 -3 -5 -6 -5 0 -2 0 H -2 1 1 0 -2 2 -1 -3 10 -4 -3 0 -4 0 -2 -1 -1 -2 3 -4 0 0 0 I -2 -4 -5 -6 -1 -4 -5 -7 -4 6 3 -4 2 0 -5 -4 -1 -2 -2 4 -5 -4 0 L -2 -4 -5 -7 -4 -3 -4 -7 -3 3 6 -4 4 2 -3 -4 -2 -2 -1 2 -6 -3 0 K -1 4 0 0 -5 2 1 -3 0 -4 -4 6 -2 -6 -1 -1 -1 -5 -4 -3 0 1 0 M -1 -2 -3 -5 -1 -1 -4 -5 -4 2 4 -2 8 1 -4 -3 -1 -4 -3 1 -4 -2 0 F -3 -5 -5 -8 -4 -4 -6 -6 0 0 2 -6 1 9 -5 -3 -3 3 6 -1 -6 -5 0 P 0 -2 -2 -2 -4 -1 -1 -3 -2 -5 -3 -1 -4 -5 10 0 -1 -5 -6 -3 -2 -1 0 S 1 -1 1 0 1 0 0 0 -1 -4 -4 -1 -3 -3 0 5 2 -4 -2 -2 0 0 0 T 1 -2 0 -1 -1 -1 -1 -3 -1 -1 -2 -1 -1 -3 -1 2 6 -7 -3 0 0 -1 0 W -5 -4 -6 -7 -7 -7 -8 -5 -2 -2 -2 -5 -4 3 -5 -4 -7 16 4 -5 -6 -7 0 Y -4 -3 -2 -6 -1 -4 -4 -6 3 -2 -1 -4 -3 6 -6 -2 -3 4 10 -3 -4 -4 0 V 0 -4 -4 -5 1 -3 -3 -5 -4 4 2 -3 1 -1 -3 -2 0 -5 -3 5 -4 -3 0 B -1 -2 5 5 -4 0 1 0 0 -5 -6 0 -4 -6 -2 0 0 -6 -4 -4 7 1 0 Z -1 0 0 1 -5 4 4 -2 0 -4 -3 1 -2 -5 -1 0 -1 -7 -4 -3 1 6 0 X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 fasta36-36.3.8i_14-Nov-2020/data/VTML_20.mat000066400000000000000000000047621433453312700173750ustar00rootroot00000000000000# # VTML_20 # # This matrix was produced from: vtml_20qij.mat using vtml_P.mat background frequencies # # VTML_20 substitution matrix, Units = bits/2.0 # Expected score = -2.916179 bits; Entropy = 2.912514 bits # Target fraction identity = 0.8307 # Lowest Score = -16, Highest Score= 12 # A R N D C Q E G H I L K M F P S T W Y V B Z X A 7 -7 -6 -6 -3 -5 -5 -4 -7 -7 -7 -6 -5 -8 -4 -2 -3 -9 -8 -3 -6 -5 0 R -7 8 -5 -12 -7 -2 -10 -7 -3 -8 -8 0 -6 -10 -7 -6 -6 -8 -7 -9 -8 -6 0 N -6 -5 8 -1 -8 -4 -5 -5 -3 -9 -9 -3 -7 -10 -8 -2 -4 -10 -6 -9 3 -4 0 D -6 -12 -1 8 -14 -4 -1 -6 -4 -12 -15 -5 -9 -16 -6 -5 -6 -10 -14 -9 3 -2 0 C -3 -7 -8 -14 12 -13 -14 -7 -6 -5 -12 -13 -4 -13 -9 -3 -5 -15 -4 -3 -11 -13 0 Q -5 -2 -4 -4 -13 9 -1 -8 -2 -9 -6 -2 -4 -8 -5 -4 -5 -15 -12 -7 -4 4 0 E -5 -10 -5 -1 -14 -1 7 -6 -6 -10 -8 -2 -8 -14 -6 -5 -6 -16 -7 -7 -3 3 0 G -4 -7 -5 -6 -7 -8 -6 7 -7 -15 -11 -7 -10 -11 -8 -4 -8 -9 -10 -10 -5 -7 0 H -7 -3 -3 -4 -6 -2 -6 -7 10 -9 -7 -5 -12 -5 -6 -5 -5 -6 -1 -8 -3 -4 0 I -7 -8 -9 -12 -5 -9 -10 -15 -9 7 -2 -9 -2 -5 -10 -9 -5 -6 -8 1 -10 -9 0 L -7 -8 -9 -15 -12 -6 -8 -11 -7 -2 6 -8 0 -3 -7 -8 -7 -6 -6 -3 -12 -7 0 K -6 0 -3 -5 -13 -2 -2 -7 -5 -9 -8 7 -5 -14 -6 -5 -4 -9 -8 -8 -4 -2 0 M -5 -6 -7 -9 -4 -4 -8 -10 -12 -2 0 -5 10 -3 -10 -8 -4 -13 -11 -3 -8 -6 0 F -8 -10 -10 -16 -13 -8 -14 -11 -5 -5 -3 -14 -3 9 -9 -7 -8 -3 0 -6 -13 -11 0 P -4 -7 -8 -6 -9 -5 -6 -8 -6 -10 -7 -6 -10 -9 9 -4 -6 -9 -15 -7 -7 -5 0 S -2 -6 -2 -5 -3 -4 -5 -4 -5 -9 -8 -5 -8 -7 -4 7 -1 -8 -6 -8 -3 -4 0 T -3 -6 -4 -6 -5 -5 -6 -8 -5 -5 -7 -4 -4 -8 -6 -1 8 -15 -8 -4 -5 -5 0 W -9 -8 -10 -10 -15 -15 -16 -9 -6 -6 -6 -9 -13 -3 -9 -8 -15 12 -2 -13 -10 -15 0 Y -8 -7 -6 -14 -4 -12 -7 -10 -1 -8 -6 -8 -11 0 -15 -6 -8 -2 9 -8 -10 -9 0 V -3 -9 -9 -9 -3 -7 -7 -10 -8 1 -3 -8 -3 -6 -7 -8 -4 -13 -8 7 -9 -7 0 B -6 -8 3 3 -11 -4 -3 -5 -3 -10 -12 -4 -8 -13 -7 -3 -5 -10 -10 -9 8 -2 0 Z -5 -6 -4 -2 -13 4 3 -7 -4 -9 -7 -2 -6 -11 -5 -4 -5 -15 -9 -7 -2 8 0 X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 fasta36-36.3.8i_14-Nov-2020/data/VTML_200.mat000066400000000000000000000047641433453312700174570ustar00rootroot00000000000000# # VTML_200 # # This matrix was produced from: vtml_200qij.mat using vtml_P.mat background frequencies # # VTML_200 substitution matrix, Units = bits/3.0 # Expected score = -0.358430 bits; Entropy = 0.412084 bits # Target fraction identity = 0.2295 # Lowest Score = -6, Highest Score= 15 # 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 -2 -1 -1 1 -1 -1 0 -2 -1 -2 -1 -1 -3 0 1 1 -4 -3 0 -1 -1 0 R -2 7 0 -2 -3 2 -1 -2 1 -3 -3 4 -2 -4 -1 -1 -1 -3 -2 -3 -1 0 0 N -1 0 6 3 -2 1 1 0 1 -4 -4 1 -3 -4 -2 1 0 -5 -2 -3 4 1 0 D -1 -2 3 6 -4 1 3 -1 0 -5 -5 0 -4 -6 -1 0 -1 -6 -4 -4 4 2 0 C 1 -3 -2 -4 12 -3 -4 -2 -2 0 -3 -4 -1 -3 -3 1 0 -6 0 1 -3 -3 0 Q -1 2 1 1 -3 5 2 -2 2 -3 -2 2 -1 -3 -1 0 0 -6 -3 -2 1 3 0 E -1 -1 1 3 -4 2 5 -1 0 -4 -4 1 -3 -5 -1 0 -1 -6 -3 -3 2 3 0 G 0 -2 0 -1 -2 -2 -1 8 -2 -6 -5 -2 -4 -5 -2 0 -2 -5 -5 -4 0 -1 0 H -2 1 1 0 -2 2 0 -2 8 -3 -2 0 -3 0 -2 0 -1 -1 3 -3 0 1 0 I -1 -3 -4 -5 0 -3 -4 -6 -3 5 3 -3 2 0 -4 -3 -1 -2 -2 4 -4 -3 0 L -2 -3 -4 -5 -3 -2 -4 -5 -2 3 5 -3 3 2 -3 -3 -2 -1 -1 2 -4 -3 0 K -1 4 1 0 -4 2 1 -2 0 -3 -3 5 -2 -5 -1 0 0 -4 -3 -3 0 1 0 M -1 -2 -3 -4 -1 -1 -3 -4 -3 2 3 -2 6 1 -3 -2 -1 -3 -2 2 -3 -2 0 F -3 -4 -4 -6 -3 -3 -5 -5 0 0 2 -5 1 8 -4 -3 -3 3 5 -1 -5 -4 0 P 0 -1 -2 -1 -3 -1 -1 -2 -2 -4 -3 -1 -3 -4 9 0 -1 -4 -5 -3 -1 -1 0 S 1 -1 1 0 1 0 0 0 0 -3 -3 0 -2 -3 0 4 2 -4 -2 -2 0 0 0 T 1 -1 0 -1 0 0 -1 -2 -1 -1 -2 0 -1 -3 -1 2 4 -5 -3 0 0 0 0 W -4 -3 -5 -6 -6 -6 -6 -5 -1 -2 -1 -4 -3 3 -4 -4 -5 15 4 -4 -5 -6 0 Y -3 -2 -2 -4 0 -3 -3 -5 3 -2 -1 -3 -2 5 -5 -2 -3 4 9 -2 -3 -3 0 V 0 -3 -3 -4 1 -2 -3 -4 -3 4 2 -3 2 -1 -3 -2 0 -4 -2 4 -3 -2 0 B -1 -1 4 4 -3 1 2 0 0 -4 -4 0 -3 -5 -1 0 0 -5 -3 -3 6 2 0 Z -1 0 1 2 -3 3 3 -1 1 -3 -3 1 -2 -4 -1 0 0 -6 -3 -2 2 5 0 X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 fasta36-36.3.8i_14-Nov-2020/data/VTML_40.mat000066400000000000000000000047621433453312700173770ustar00rootroot00000000000000# # VTML_40 # # This matrix was produced from: vtml_40qij.mat using vtml_P.mat background frequencies # # VTML_40 substitution matrix, Units = bits/2.0 # Expected score = -1.991667 bits; Entropy = 2.267456 bits # Target fraction identity = 0.6960 # Lowest Score = -12, Highest Score= 12 # A R N D C Q E G H I L K M F P S T W Y V B Z X A 6 -5 -4 -4 -1 -3 -3 -2 -5 -5 -5 -4 -4 -6 -3 0 -1 -7 -6 -1 -4 -3 0 R -5 8 -3 -8 -5 -1 -7 -5 -2 -7 -6 2 -4 -8 -5 -4 -4 -6 -5 -7 -5 -4 0 N -4 -3 8 0 -6 -2 -3 -3 -1 -7 -7 -2 -5 -8 -6 -1 -2 -8 -4 -7 4 -2 0 D -4 -8 0 8 -10 -3 1 -4 -3 -10 -11 -3 -7 -12 -4 -3 -4 -9 -10 -7 4 -1 0 C -1 -5 -6 -10 11 -9 -10 -5 -5 -3 -9 -9 -3 -9 -7 -2 -3 -12 -3 -2 -8 -9 0 Q -3 -1 -2 -3 -9 8 1 -6 0 -7 -4 0 -3 -6 -3 -2 -3 -11 -8 -5 -2 4 0 E -3 -7 -3 1 -10 1 7 -5 -4 -8 -7 -1 -6 -11 -4 -3 -4 -12 -5 -6 -1 4 0 G -2 -5 -3 -4 -5 -6 -5 7 -5 -12 -9 -5 -8 -9 -6 -3 -6 -7 -8 -8 -3 -5 0 H -5 -2 -1 -3 -5 0 -4 -5 10 -7 -5 -3 -8 -3 -4 -3 -4 -4 0 -6 -2 -2 0 I -5 -7 -7 -10 -3 -7 -8 -12 -7 7 0 -7 0 -3 -8 -7 -3 -4 -5 2 -8 -7 0 L -5 -6 -7 -11 -9 -4 -7 -9 -5 0 6 -6 1 -1 -5 -6 -5 -4 -4 -1 -9 -5 0 K -4 2 -2 -3 -9 0 -1 -5 -3 -7 -6 7 -4 -10 -4 -3 -3 -7 -6 -6 -2 0 0 M -4 -4 -5 -7 -3 -3 -6 -8 -8 0 1 -4 9 -1 -8 -6 -3 -9 -8 -2 -6 -4 0 F -6 -8 -8 -12 -9 -6 -11 -9 -3 -3 -1 -10 -1 8 -7 -5 -6 -1 2 -4 -10 -8 0 P -3 -5 -6 -4 -7 -3 -4 -6 -4 -8 -5 -4 -8 -7 8 -2 -4 -7 -11 -6 -5 -3 0 S 0 -4 -1 -3 -2 -2 -3 -3 -3 -7 -6 -3 -6 -5 -2 7 1 -6 -4 -6 -2 -2 0 T -1 -4 -2 -4 -3 -3 -4 -6 -4 -3 -5 -3 -3 -6 -4 1 7 -11 -6 -2 -3 -3 0 W -7 -6 -8 -9 -12 -11 -12 -7 -4 -4 -4 -7 -9 -1 -7 -6 -11 12 0 -10 -8 -11 0 Y -6 -5 -4 -10 -3 -8 -5 -8 0 -5 -4 -6 -8 2 -11 -4 -6 0 9 -6 -7 -6 0 V -1 -7 -7 -7 -2 -5 -6 -8 -6 2 -1 -6 -2 -4 -6 -6 -2 -10 -6 6 -7 -5 0 B -4 -5 4 4 -8 -2 -1 -3 -2 -8 -9 -2 -6 -10 -5 -2 -3 -8 -7 -7 8 0 0 Z -3 -4 -2 -1 -9 4 4 -5 -2 -7 -5 0 -4 -8 -3 -2 -3 -11 -6 -5 0 7 0 X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 fasta36-36.3.8i_14-Nov-2020/data/VTML_80.mat000066400000000000000000000047611433453312700174020ustar00rootroot00000000000000# # VTML_80 # # This matrix was produced from: vtml_80qij.mat using vtml_P.mat background frequencies # # VTML_80 substitution matrix, Units = bits/2.0 # Expected score = -1.134601 bits; Entropy = 1.427882 bits # Target fraction identity = 0.5015 # Lowest Score = -9, Highest Score= 11 # A R N D C Q E G H I L K M F P S T W Y V B Z X A 5 -3 -2 -2 0 -2 -2 -1 -3 -3 -3 -2 -2 -4 -1 1 0 -5 -4 0 -2 -2 0 R -3 7 -2 -5 -4 1 -3 -3 0 -5 -4 3 -3 -6 -3 -2 -3 -4 -3 -5 -3 -1 0 N -2 -2 7 1 -4 -1 -1 -1 0 -5 -5 0 -4 -5 -4 1 -1 -6 -2 -5 4 -1 0 D -2 -5 1 7 -7 -1 2 -2 -1 -7 -8 -2 -5 -9 -2 -1 -2 -7 -7 -5 4 0 0 C 0 -4 -4 -7 10 -6 -7 -3 -3 -2 -5 -6 -1 -6 -4 0 -2 -8 -1 0 -5 -6 0 Q -2 1 -1 -1 -6 7 2 -4 1 -5 -3 1 -2 -4 -2 -1 -2 -8 -5 -3 -1 4 0 E -2 -3 -1 2 -7 2 6 -3 -2 -5 -5 0 -4 -7 -2 -1 -2 -8 -4 -4 0 4 0 G -1 -3 -1 -2 -3 -4 -3 7 -3 -8 -7 -3 -6 -6 -4 -1 -4 -5 -6 -5 -1 -3 0 H -3 0 0 -1 -3 1 -2 -3 9 -5 -3 -1 -5 -1 -3 -1 -2 -2 1 -4 0 0 0 I -3 -5 -5 -7 -2 -5 -5 -8 -5 6 1 -5 1 -1 -6 -5 -2 -3 -3 3 -6 -5 0 L -3 -4 -5 -8 -5 -3 -5 -7 -3 1 5 -4 2 0 -4 -4 -3 -2 -2 0 -6 -4 0 K -2 3 0 -2 -6 1 0 -3 -1 -5 -4 6 -2 -7 -2 -2 -1 -5 -4 -4 -1 0 0 M -2 -3 -4 -5 -1 -2 -4 -6 -5 1 2 -2 8 0 -5 -4 -1 -6 -4 0 -4 -3 0 F -4 -6 -5 -9 -6 -4 -7 -6 -1 -1 0 -7 0 8 -5 -3 -4 1 3 -2 -7 -5 0 P -1 -3 -4 -2 -4 -2 -2 -4 -3 -6 -4 -2 -5 -5 8 -1 -2 -5 -7 -4 -3 -2 0 S 1 -2 1 -1 0 -1 -1 -1 -1 -5 -4 -2 -4 -3 -1 5 1 -4 -3 -3 0 -1 0 T 0 -3 -1 -2 -2 -2 -2 -4 -2 -2 -3 -1 -1 -4 -2 1 6 -7 -4 -1 -1 -2 0 W -5 -4 -6 -7 -8 -8 -8 -5 -2 -3 -2 -5 -6 1 -5 -4 -7 11 1 -6 -6 -8 0 Y -4 -3 -2 -7 -1 -5 -4 -6 1 -3 -2 -4 -4 3 -7 -3 -4 1 8 -4 -4 -4 0 V 0 -5 -5 -5 0 -3 -4 -5 -4 3 0 -4 0 -2 -4 -3 -1 -6 -4 5 -5 -3 0 B -2 -3 4 4 -5 -1 0 -1 0 -6 -6 -1 -4 -7 -3 0 -1 -6 -4 -5 7 0 0 Z -2 -1 -1 0 -6 4 4 -3 0 -5 -4 0 -3 -5 -2 -1 -2 -8 -4 -3 0 6 0 X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 fasta36-36.3.8i_14-Nov-2020/data/blosum45.mat000066400000000000000000000036021433453312700177540ustar00rootroot00000000000000# Matrix made by matblas from blosum45.iij # BLOSUM Clustered Scoring Matrix in 1/3 Bit Units # Blocks Database = /data/blocks_5.0/blocks.dat # Cluster Percentage: >= 45 # Entropy = 0.3795, Expected = -0.2789 A R N D C Q E G H I L K M F P S T W Y V B Z X A 5 -2 -1 -2 -1 -1 -1 0 -2 -1 -1 -1 -1 -2 -1 1 0 -2 -2 0 -1 -1 0 R -2 7 0 -1 -3 1 0 -2 0 -3 -2 3 -1 -2 -2 -1 -1 -2 -1 -2 -1 0 -1 N -1 0 6 2 -2 0 0 0 1 -2 -3 0 -2 -2 -2 1 0 -4 -2 -3 4 0 -1 D -2 -1 2 7 -3 0 2 -1 0 -4 -3 0 -3 -4 -1 0 -1 -4 -2 -3 5 1 -1 C -1 -3 -2 -3 12 -3 -3 -3 -3 -3 -2 -3 -2 -2 -4 -1 -1 -5 -3 -1 -2 -3 -2 Q -1 1 0 0 -3 6 2 -2 1 -2 -2 1 0 -4 -1 0 -1 -2 -1 -3 0 4 -1 E -1 0 0 2 -3 2 6 -2 0 -3 -2 1 -2 -3 0 0 -1 -3 -2 -3 1 4 -1 G 0 -2 0 -1 -3 -2 -2 7 -2 -4 -3 -2 -2 -3 -2 0 -2 -2 -3 -3 -1 -2 -1 H -2 0 1 0 -3 1 0 -2 10 -3 -2 -1 0 -2 -2 -1 -2 -3 2 -3 0 0 -1 I -1 -3 -2 -4 -3 -2 -3 -4 -3 5 2 -3 2 0 -2 -2 -1 -2 0 3 -3 -3 -1 L -1 -2 -3 -3 -2 -2 -2 -3 -2 2 5 -3 2 1 -3 -3 -1 -2 0 1 -3 -2 -1 K -1 3 0 0 -3 1 1 -2 -1 -3 -3 5 -1 -3 -1 -1 -1 -2 -1 -2 0 1 -1 M -1 -1 -2 -3 -2 0 -2 -2 0 2 2 -1 6 0 -2 -2 -1 -2 0 1 -2 -1 -1 F -2 -2 -2 -4 -2 -4 -3 -3 -2 0 1 -3 0 8 -3 -2 -1 1 3 0 -3 -3 -1 P -1 -2 -2 -1 -4 -1 0 -2 -2 -2 -3 -1 -2 -3 9 -1 -1 -3 -3 -3 -2 -1 -1 S 1 -1 1 0 -1 0 0 0 -1 -2 -3 -1 -2 -2 -1 4 2 -4 -2 -1 0 0 0 T 0 -1 0 -1 -1 -1 -1 -2 -2 -1 -1 -1 -1 -1 -1 2 5 -3 -1 0 0 -1 0 W -2 -2 -4 -4 -5 -2 -3 -2 -3 -2 -2 -2 -2 1 -3 -4 -3 15 3 -3 -4 -2 -2 Y -2 -1 -2 -2 -3 -1 -2 -3 2 0 0 -1 0 3 -3 -2 -1 3 8 -1 -2 -2 -1 V 0 -2 -3 -3 -1 -3 -3 -3 -3 3 1 -2 1 0 -3 -1 0 -3 -1 5 -3 -3 -1 B -1 -1 4 5 -2 0 1 -1 0 -3 -3 0 -2 -3 -2 0 0 -4 -2 -3 4 2 -1 Z -1 0 0 1 -3 4 4 -2 0 -3 -2 1 -1 -3 -1 0 -1 -2 -2 -3 2 4 -1 X 0 -1 -1 -1 -2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 -2 -1 -1 -1 -1 -1 fasta36-36.3.8i_14-Nov-2020/data/blosum50.mat000066400000000000000000000036011433453312700177470ustar00rootroot00000000000000# Matrix made by matblas from blosum50.iij # BLOSUM Clustered Scoring Matrix in 1/3 Bit Units # Blocks Database = /data/blocks_5.0/blocks.dat # Cluster Percentage: >= 50 # Entropy = 0.4808, Expected = -0.3573 A R N D C Q E G H I L K M F P S T W Y V B Z X A 5 -2 -1 -2 -1 -1 -1 0 -2 -1 -2 -1 -1 -3 -1 1 0 -3 -2 0 -2 -1 -1 R -2 7 -1 -2 -4 1 0 -3 0 -4 -3 3 -2 -3 -3 -1 -1 -3 -1 -3 -1 0 -1 N -1 -1 7 2 -2 0 0 0 1 -3 -4 0 -2 -4 -2 1 0 -4 -2 -3 4 0 -1 D -2 -2 2 8 -4 0 2 -1 -1 -4 -4 -1 -4 -5 -1 0 -1 -5 -3 -4 5 1 -1 C -1 -4 -2 -4 13 -3 -3 -3 -3 -2 -2 -3 -2 -2 -4 -1 -1 -5 -3 -1 -3 -3 -2 Q -1 1 0 0 -3 7 2 -2 1 -3 -2 2 0 -4 -1 0 -1 -1 -1 -3 0 4 -1 E -1 0 0 2 -3 2 6 -3 0 -4 -3 1 -2 -3 -1 -1 -1 -3 -2 -3 1 5 -1 G 0 -3 0 -1 -3 -2 -3 8 -2 -4 -4 -2 -3 -4 -2 0 -2 -3 -3 -4 -1 -2 -2 H -2 0 1 -1 -3 1 0 -2 10 -4 -3 0 -1 -1 -2 -1 -2 -3 2 -4 0 0 -1 I -1 -4 -3 -4 -2 -3 -4 -4 -4 5 2 -3 2 0 -3 -3 -1 -3 -1 4 -4 -3 -1 L -2 -3 -4 -4 -2 -2 -3 -4 -3 2 5 -3 3 1 -4 -3 -1 -2 -1 1 -4 -3 -1 K -1 3 0 -1 -3 2 1 -2 0 -3 -3 6 -2 -4 -1 0 -1 -3 -2 -3 0 1 -1 M -1 -2 -2 -4 -2 0 -2 -3 -1 2 3 -2 7 0 -3 -2 -1 -1 0 1 -3 -1 -1 F -3 -3 -4 -5 -2 -4 -3 -4 -1 0 1 -4 0 8 -4 -3 -2 1 4 -1 -4 -4 -2 P -1 -3 -2 -1 -4 -1 -1 -2 -2 -3 -4 -1 -3 -4 10 -1 -1 -4 -3 -3 -2 -1 -2 S 1 -1 1 0 -1 0 -1 0 -1 -3 -3 0 -2 -3 -1 5 2 -4 -2 -2 0 0 -1 T 0 -1 0 -1 -1 -1 -1 -2 -2 -1 -1 -1 -1 -2 -1 2 5 -3 -2 0 0 -1 0 W -3 -3 -4 -5 -5 -1 -3 -3 -3 -3 -2 -3 -1 1 -4 -4 -3 15 2 -3 -5 -2 -3 Y -2 -1 -2 -3 -3 -1 -2 -3 2 -1 -1 -2 0 4 -3 -2 -2 2 8 -1 -3 -2 -1 V 0 -3 -3 -4 -1 -3 -3 -4 -4 4 1 -3 1 -1 -3 -2 0 -3 -1 5 -4 -3 -1 B -2 -1 4 5 -3 0 1 -1 0 -4 -4 0 -3 -4 -2 0 0 -5 -3 -4 5 2 -1 Z -1 0 0 1 -3 4 5 -2 0 -3 -3 1 -1 -4 -1 0 -1 -2 -2 -3 2 5 -1 X -1 -1 -1 -1 -2 -1 -1 -2 -1 -1 -1 -1 -1 -2 -2 -1 0 -3 -1 -1 -1 -1 -1 fasta36-36.3.8i_14-Nov-2020/data/blosum62.mat000066400000000000000000000036021433453312700177530ustar00rootroot00000000000000# Matrix made by matblas from blosum62.iij # 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 R -1 5 0 -2 -3 1 0 -2 0 -3 -2 2 -1 -3 -2 -1 -1 -3 -2 -3 -1 0 -1 N -2 0 6 1 -3 0 0 0 1 -3 -3 0 -2 -3 -2 1 0 -4 -2 -3 3 0 -1 D -2 -2 1 6 -3 0 2 -1 -1 -3 -4 -1 -3 -3 -1 0 -1 -4 -3 -3 4 1 -1 C 0 -3 -3 -3 9 -3 -4 -3 -3 -1 -1 -3 -1 -2 -3 -1 -1 -2 -2 -1 -3 -3 -2 Q -1 1 0 0 -3 5 2 -2 0 -3 -2 1 0 -3 -1 0 -1 -2 -1 -2 0 3 -1 E -1 0 0 2 -4 2 5 -2 0 -3 -3 1 -2 -3 -1 0 -1 -3 -2 -2 1 4 -1 G 0 -2 0 -1 -3 -2 -2 6 -2 -4 -4 -2 -3 -3 -2 0 -2 -2 -3 -3 -1 -2 -1 H -2 0 1 -1 -3 0 0 -2 8 -3 -3 -1 -2 -1 -2 -1 -2 -2 2 -3 0 0 -1 I -1 -3 -3 -3 -1 -3 -3 -4 -3 4 2 -3 1 0 -3 -2 -1 -3 -1 3 -3 -3 -1 L -1 -2 -3 -4 -1 -2 -3 -4 -3 2 4 -2 2 0 -3 -2 -1 -2 -1 1 -4 -3 -1 K -1 2 0 -1 -3 1 1 -2 -1 -3 -2 5 -1 -3 -1 0 -1 -3 -2 -2 0 1 -1 M -1 -1 -2 -3 -1 0 -2 -3 -2 1 2 -1 5 0 -2 -1 -1 -1 -1 1 -3 -1 -1 F -2 -3 -3 -3 -2 -3 -3 -3 -1 0 0 -3 0 6 -4 -2 -2 1 3 -1 -3 -3 -1 P -1 -2 -2 -1 -3 -1 -1 -2 -2 -3 -3 -1 -2 -4 7 -1 -1 -4 -3 -2 -2 -1 -2 S 1 -1 1 0 -1 0 0 0 -1 -2 -2 0 -1 -2 -1 4 1 -3 -2 -2 0 0 0 T 0 -1 0 -1 -1 -1 -1 -2 -2 -1 -1 -1 -1 -2 -1 1 5 -2 -2 0 -1 -1 0 W -3 -3 -4 -4 -2 -2 -3 -2 -2 -3 -2 -3 -1 1 -4 -3 -2 11 2 -3 -4 -3 -2 Y -2 -2 -2 -3 -2 -1 -2 -3 2 -1 -1 -2 -1 3 -3 -2 -2 2 7 -1 -3 -2 -1 V 0 -3 -3 -3 -1 -2 -2 -3 -3 3 1 -2 1 -1 -2 -2 0 -3 -1 4 -3 -2 -1 B -2 -1 3 4 -3 0 1 -1 0 -3 -4 0 -3 -3 -2 0 -1 -4 -3 -3 4 1 -1 Z -1 0 0 1 -3 3 4 -2 0 -3 -3 1 -1 -3 -1 0 -1 -3 -2 -2 1 4 -1 X 0 -1 -1 -1 -2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -2 0 0 -2 -1 -1 -1 -1 -1 fasta36-36.3.8i_14-Nov-2020/data/blosum80.mat000066400000000000000000000036041433453312700177550ustar00rootroot00000000000000# Matrix made by matblas from blosum80_3.iij # BLOSUM Clustered Scoring Matrix in 1/3 Bit Units # Blocks Database = /data/blocks_5.0/blocks.dat # Cluster Percentage: >= 80 # Entropy = 0.9868, Expected = -0.7442 A R N D C Q E G H I L K M F P S T W Y V B Z X A 7 -3 -3 -3 -1 -2 -2 0 -3 -3 -3 -1 -2 -4 -1 2 0 -5 -4 -1 -3 -2 -1 R -3 9 -1 -3 -6 1 -1 -4 0 -5 -4 3 -3 -5 -3 -2 -2 -5 -4 -4 -2 0 -2 N -3 -1 9 2 -5 0 -1 -1 1 -6 -6 0 -4 -6 -4 1 0 -7 -4 -5 5 -1 -2 D -3 -3 2 10 -7 -1 2 -3 -2 -7 -7 -2 -6 -6 -3 -1 -2 -8 -6 -6 6 1 -3 C -1 -6 -5 -7 13 -5 -7 -6 -7 -2 -3 -6 -3 -4 -6 -2 -2 -5 -5 -2 -6 -7 -4 Q -2 1 0 -1 -5 9 3 -4 1 -5 -4 2 -1 -5 -3 -1 -1 -4 -3 -4 -1 5 -2 E -2 -1 -1 2 -7 3 8 -4 0 -6 -6 1 -4 -6 -2 -1 -2 -6 -5 -4 1 6 -2 G 0 -4 -1 -3 -6 -4 -4 9 -4 -7 -7 -3 -5 -6 -5 -1 -3 -6 -6 -6 -2 -4 -3 H -3 0 1 -2 -7 1 0 -4 12 -6 -5 -1 -4 -2 -4 -2 -3 -4 3 -5 -1 0 -2 I -3 -5 -6 -7 -2 -5 -6 -7 -6 7 2 -5 2 -1 -5 -4 -2 -5 -3 4 -6 -6 -2 L -3 -4 -6 -7 -3 -4 -6 -7 -5 2 6 -4 3 0 -5 -4 -3 -4 -2 1 -7 -5 -2 K -1 3 0 -2 -6 2 1 -3 -1 -5 -4 8 -3 -5 -2 -1 -1 -6 -4 -4 -1 1 -2 M -2 -3 -4 -6 -3 -1 -4 -5 -4 2 3 -3 9 0 -4 -3 -1 -3 -3 1 -5 -3 -2 F -4 -5 -6 -6 -4 -5 -6 -6 -2 -1 0 -5 0 10 -6 -4 -4 0 4 -2 -6 -6 -3 P -1 -3 -4 -3 -6 -3 -2 -5 -4 -5 -5 -2 -4 -6 12 -2 -3 -7 -6 -4 -4 -2 -3 S 2 -2 1 -1 -2 -1 -1 -1 -2 -4 -4 -1 -3 -4 -2 7 2 -6 -3 -3 0 -1 -1 T 0 -2 0 -2 -2 -1 -2 -3 -3 -2 -3 -1 -1 -4 -3 2 8 -5 -3 0 -1 -2 -1 W -5 -5 -7 -8 -5 -4 -6 -6 -4 -5 -4 -6 -3 0 -7 -6 -5 16 3 -5 -8 -5 -5 Y -4 -4 -4 -6 -5 -3 -5 -6 3 -3 -2 -4 -3 4 -6 -3 -3 3 11 -3 -5 -4 -3 V -1 -4 -5 -6 -2 -4 -4 -6 -5 4 1 -4 1 -2 -4 -3 0 -5 -3 7 -6 -4 -2 B -3 -2 5 6 -6 -1 1 -2 -1 -6 -7 -1 -5 -6 -4 0 -1 -8 -5 -6 6 0 -3 Z -2 0 -1 1 -7 5 6 -4 0 -6 -5 1 -3 -6 -2 -1 -2 -5 -4 -4 0 6 -1 X -1 -2 -2 -3 -4 -2 -2 -3 -2 -2 -2 -2 -2 -3 -3 -1 -1 -5 -3 -2 -3 -1 -2 fasta36-36.3.8i_14-Nov-2020/data/dna.mat000066400000000000000000000017201433453312700170430ustar00rootroot00000000000000# Sample dna matrix A C G T U R Y M W S K D H V B N X A 5 -4 -4 -4 -4 2 -1 2 2 -1 -1 1 1 1 -2 -1 -1 C -4 5 -4 -4 -4 -1 2 2 -1 2 -1 -2 1 1 1 -1 -1 G -4 -4 5 -4 -4 2 -1 -1 -1 2 2 1 -2 1 1 -1 -1 T -4 -4 -4 5 5 -1 2 -1 2 -1 2 1 1 -2 1 -1 -1 U -4 -4 -4 5 5 -1 2 -1 2 -1 2 1 1 -2 1 -1 -1 R 2 -1 2 -1 -1 2 -2 -1 1 1 1 1 -1 1 -1 -1 -1 Y -1 2 -1 2 2 -2 2 -1 1 1 1 -1 1 -1 1 -1 -1 M 2 2 -1 -1 -1 -1 -1 2 1 1 -1 -1 1 1 -1 -1 -1 W 2 -1 -1 2 2 1 1 1 2 -1 1 1 1 -1 -1 -1 -1 S -1 2 2 -1 -1 1 1 1 -1 2 1 -1 -1 1 1 -1 -1 K -1 -1 2 2 2 1 1 -1 1 1 2 1 -1 -1 1 -1 -1 D 1 -2 1 1 1 1 -1 -1 1 -1 1 1 -1 -1 -1 -1 -1 H 1 1 -2 1 1 -1 1 1 1 -1 -1 -1 1 -1 -1 -1 -1 V 1 1 1 -2 -2 1 -1 1 -1 1 -1 -1 -1 1 -1 -1 -1 B -2 1 1 1 1 -1 1 -1 -1 1 1 -1 -1 -1 1 -1 -1 N -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 fasta36-36.3.8i_14-Nov-2020/data/idn_aa.mat000066400000000000000000000043201433453312700175130ustar00rootroot00000000000000 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 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 R -10 4 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 N -10 -10 4 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 D -10 -10 -10 4 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 C -10 -10 -10 -10 4 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 Q -10 -10 -10 -10 -10 4 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 E -10 -10 -10 -10 -10 -10 4 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 G -10 -10 -10 -10 -10 -10 -10 4 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 H -10 -10 -10 -10 -10 -10 -10 -10 4 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 I -10 -10 -10 -10 -10 -10 -10 -10 -10 4 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 L -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 4 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 K -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 4 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 M -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 4 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 F -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 4 -10 -10 -10 -10 -10 -10 -10 -10 -10 P -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 4 -10 -10 -10 -10 -10 -10 -10 -10 S -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 4 -10 -10 -10 -10 -10 -10 -10 T -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 4 -10 -10 -10 -10 -10 -10 W -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 4 -10 -10 -10 -10 -10 Y -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 4 -10 -10 -10 -10 V -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 4 -10 -10 -10 B -10 -10 2 2 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 4 -10 -10 Z -10 -10 -10 -10 -10 2 2 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 4 -10 X -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 0 fasta36-36.3.8i_14-Nov-2020/data/md_10.mat000066400000000000000000000043171433453312700172060ustar00rootroot00000000000000 A R N D C Q E G H I L K M F P S T W Y V B Z X A 11 -13 -12 -11 -13 -13 -10 -8 -15 -13 -15 -14 -13 -18 -7 -5 -4 -20 -19 -6 -12 -11 -1 R -12 12 -13 -18 -10 -5 -15 -9 -5 -17 -14 -2 -14 -22 -11 -10 -12 -9 -17 -17 -15 -10 -1 N -12 -13 13 -3 -14 -11 -12 -11 -5 -13 -19 -6 -15 -20 -17 -4 -7 -21 -12 -17 5 -11 -1 D -11 -18 -3 12 -20 -13 -2 -9 -10 -19 -21 -15 -18 -23 -18 -12 -14 -24 -13 -15 5 -7 -1 C -13 -10 -14 -20 17 -19 -22 -12 -12 -18 -16 -21 -15 -11 -18 -7 -14 -9 -7 -12 -17 -21 -1 Q -13 -5 -11 -13 -19 13 -5 -15 -3 -19 -12 -6 -14 -22 -8 -13 -13 -17 -16 -17 -12 4 -1 E -10 -15 -12 -2 -22 -5 12 -9 -15 -19 -20 -8 -17 -23 -17 -15 -15 -20 -21 -14 -7 3 -1 G -8 -9 -11 -9 -12 -16 -9 11 -16 -21 -21 -15 -18 -22 -16 -7 -14 -13 -21 -13 -10 -13 -1 H -16 -5 -5 -10 -12 -3 -15 -16 16 -17 -13 -13 -15 -14 -10 -11 -13 -20 -3 -19 -7 -9 -1 I -13 -17 -14 -19 -17 -20 -19 -21 -18 12 -7 -17 -4 -11 -19 -14 -7 -20 -15 -1 -16 -19 -1 L -15 -14 -19 -21 -16 -12 -20 -21 -13 -7 10 -18 -4 -6 -10 -13 -15 -13 -16 -8 -20 -16 -1 K -14 -2 -6 -15 -21 -6 -8 -15 -13 -17 -18 12 -12 -24 -17 -13 -10 -19 -20 -18 -11 -7 -1 M -13 -14 -15 -18 -15 -14 -18 -19 -15 -4 -4 -12 16 -14 -17 -15 -7 -16 -18 -5 -16 -16 -1 F -18 -22 -19 -22 -11 -22 -23 -22 -14 -11 -6 -23 -14 14 -17 -11 -18 -13 -3 -12 -21 -22 -1 P -7 -12 -17 -18 -18 -8 -17 -16 -10 -19 -10 -16 -17 -17 13 -6 -9 -22 -20 -16 -17 -13 -1 S -5 -10 -4 -12 -7 -13 -15 -7 -11 -14 -13 -13 -15 -11 -6 11 -4 -15 -12 -14 -8 -14 -1 T -4 -12 -7 -14 -14 -13 -15 -14 -13 -7 -16 -10 -7 -19 -9 -4 12 -19 -17 -10 -10 -14 -1 W -21 -9 -21 -21 -10 -17 -21 -13 -21 -21 -13 -21 -17 -13 -21 -15 -18 18 -12 -16 -21 -19 -1 Y -20 -17 -12 -13 -7 -16 -21 -20 -3 -15 -16 -20 -17 -3 -20 -12 -17 -12 15 -18 -13 -19 -1 V -6 -17 -17 -15 -12 -17 -14 -13 -19 -1 -8 -18 -5 -12 -16 -14 -10 -16 -18 11 -16 -15 -1 B -12 -15 5 5 -17 -12 -7 -10 -7 -16 -20 -11 -17 -21 -17 -8 -10 -22 -13 -16 13 -9 -1 Z -16 -18 -17 -8 -32 1 9 -17 -17 -29 -26 -11 -24 -34 -21 -21 -21 -29 -29 -22 -9 13 -1 X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 fasta36-36.3.8i_14-Nov-2020/data/md_20.mat000066400000000000000000000043201433453312700172010ustar00rootroot00000000000000 A R N D C Q E G H I L K M F P S T W Y V B Z X A 10 -10 -9 -8 -10 -10 -7 -5 -12 -10 -12 -11 -9 -15 -5 -2 -1 -17 -16 -3 -9 -8 -1 R -10 12 -10 -14 -7 -3 -11 -6 -3 -14 -12 0 -11 -18 -9 -7 -9 -6 -14 -14 -12 -7 -1 N -9 -10 13 -1 -11 -8 -9 -8 -2 -11 -15 -4 -12 -16 -13 -1 -4 -18 -9 -14 6 -8 -1 D -8 -14 -1 12 -16 -9 1 -6 -7 -16 -18 -11 -15 -20 -15 -9 -11 -20 -11 -12 6 -4 -1 C -10 -7 -11 -16 17 -16 -19 -9 -9 -14 -13 -17 -12 -8 -14 -4 -11 -7 -4 -10 -14 -17 -1 Q -10 -3 -8 -9 -16 13 -3 -12 0 -16 -9 -3 -11 -18 -5 -10 -10 -14 -12 -14 -9 5 -1 E -7 -11 -9 1 -19 -3 11 -7 -12 -16 -17 -5 -14 -20 -14 -12 -12 -17 -18 -11 -4 4 -1 G -5 -6 -8 -6 -9 -12 -7 11 -13 -17 -18 -12 -15 -19 -12 -5 -11 -10 -17 -11 -7 -9 -1 H -12 -3 -2 -7 -9 0 -12 -13 15 -14 -10 -9 -12 -11 -7 -8 -10 -16 0 -15 -4 -6 -1 I -10 -14 -11 -16 -14 -16 -16 -17 -14 12 -4 -14 -1 -8 -15 -11 -4 -16 -12 2 -13 -16 -1 L -12 -11 -15 -18 -13 -9 -17 -18 -10 -4 10 -15 -2 -4 -7 -10 -12 -10 -13 -5 -17 -13 -1 K -11 0 -4 -12 -17 -3 -5 -12 -9 -14 -15 12 -9 -21 -13 -10 -7 -16 -17 -15 -8 -4 -1 M -9 -11 -12 -15 -12 -11 -15 -16 -12 -1 -2 -9 15 -10 -14 -12 -4 -13 -14 -3 -13 -13 -1 F -15 -19 -16 -19 -8 -18 -20 -19 -11 -8 -4 -19 -10 13 -14 -8 -15 -10 0 -9 -17 -19 -1 P -5 -9 -13 -15 -14 -5 -14 -12 -7 -15 -7 -13 -14 -14 12 -3 -7 -18 -16 -13 -14 -10 -1 S -2 -8 -1 -9 -4 -10 -12 -5 -8 -11 -10 -10 -12 -8 -3 10 -1 -12 -9 -11 -5 -11 -1 T -1 -9 -4 -11 -10 -10 -12 -11 -10 -4 -12 -7 -4 -15 -7 -1 11 -16 -14 -7 -7 -11 -1 W -17 -6 -18 -18 -7 -14 -18 -10 -17 -17 -10 -17 -14 -10 -18 -12 -15 18 -9 -13 -18 -16 -1 Y -16 -14 -9 -11 -4 -12 -18 -17 0 -12 -12 -17 -14 0 -16 -9 -13 -9 14 -15 -10 -15 -1 V -3 -14 -14 -12 -9 -14 -11 -11 -15 2 -5 -15 -2 -9 -13 -11 -7 -13 -14 11 -13 -12 -1 B -9 -12 6 6 -14 -9 -4 -7 -4 -13 -17 -8 -13 -18 -14 -5 -7 -19 -10 -13 12 -6 -1 Z -12 -13 -13 -4 -27 4 10 -13 -12 -24 -21 -6 -20 -29 -17 -17 -17 -24 -24 -18 -6 12 -1 X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 fasta36-36.3.8i_14-Nov-2020/data/md_40.mat000066400000000000000000000043171433453312700172110ustar00rootroot00000000000000 A R N D C Q E G H I L K M F P S T W Y V B Z X A 9 -7 -6 -6 -7 -7 -5 -3 -10 -6 -9 -8 -7 -11 -2 0 1 -13 -12 -1 -6 -6 -1 R -7 11 -6 -10 -5 0 -8 -4 0 -10 -9 3 -8 -14 -6 -5 -6 -4 -10 -11 -8 -4 -1 N -6 -6 12 2 -8 -5 -5 -5 0 -8 -12 -1 -9 -13 -9 1 -2 -16 -6 -10 7 -5 -1 D -6 -10 2 11 -13 -6 3 -4 -5 -12 -15 -8 -11 -16 -11 -6 -7 -15 -8 -9 6 -1 -1 C -6 -5 -8 -13 16 -12 -15 -7 -6 -11 -11 -13 -9 -6 -11 -2 -7 -4 -2 -7 -11 -13 -1 Q -7 0 -5 -6 -12 12 0 -9 2 -13 -6 0 -8 -14 -3 -7 -7 -11 -9 -11 -6 6 -1 E -5 -8 -5 3 -15 0 10 -4 -8 -12 -13 -3 -11 -16 -10 -8 -8 -13 -14 -8 -1 5 -1 G -3 -4 -5 -4 -7 -9 -4 10 -10 -13 -14 -9 -12 -15 -9 -2 -8 -7 -15 -8 -5 -7 -1 H -10 0 0 -5 -6 2 -8 -10 14 -11 -7 -6 -9 -7 -4 -6 -7 -12 2 -12 -2 -3 -1 I -6 -10 -8 -12 -11 -13 -12 -13 -11 11 -1 -11 1 -6 -11 -8 -2 -12 -9 4 -10 -12 -1 L -9 -9 -12 -14 -11 -6 -13 -14 -7 -1 9 -12 1 -1 -5 -7 -9 -7 -9 -2 -13 -10 -1 K -8 3 -1 -8 -13 0 -3 -9 -6 -11 -12 11 -7 -18 -10 -7 -5 -12 -13 -12 -5 -2 -1 M -7 -8 -9 -11 -8 -8 -11 -12 -9 1 1 -7 14 -7 -10 -8 -2 -11 -11 0 -10 -10 -1 F -11 -14 -12 -16 -6 -14 -16 -15 -7 -6 -1 -17 -7 13 -11 -5 -11 -7 2 -6 -14 -15 -1 P -2 -6 -9 -12 -11 -3 -10 -9 -4 -11 -5 -10 -10 -11 12 -1 -4 -14 -12 -9 -11 -7 -1 S 0 -5 1 -6 -2 -7 -8 -2 -6 -8 -7 -7 -8 -5 -1 9 1 -10 -7 -7 -3 -8 -1 T 1 -6 -2 -7 -7 -7 -8 -8 -7 -2 -9 -5 -2 -11 -4 1 10 -14 -10 -4 -5 -8 -1 W -14 -4 -17 -15 -4 -12 -13 -7 -11 -12 -7 -13 -11 -7 -14 -10 -14 18 -6 -11 -16 -12 -1 Y -12 -9 -6 -8 -2 -9 -14 -14 2 -9 -9 -13 -11 2 -12 -7 -11 -6 14 -11 -7 -11 -1 V -1 -11 -10 -9 -7 -11 -8 -8 -12 4 -2 -12 0 -6 -10 -7 -4 -10 -11 10 -10 -9 -1 B -6 -8 7 6 -11 -6 -1 -5 -2 -10 -13 -5 -10 -14 -10 -3 -5 -16 -7 -10 11 -3 -1 Z -8 -8 -8 0 -21 6 10 -9 -7 -18 -16 -3 -15 -23 -12 -12 -12 -19 -18 -14 -3 11 -1 X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 fasta36-36.3.8i_14-Nov-2020/data/pam120.mat000066400000000000000000000036021433453312700173020ustar00rootroot00000000000000# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 120 substitution matrix, scale = ln(2)/2 = 0.346574 # # Expected score = -1.64, Entropy = 0.979 bits # # Lowest score = -8, Highest score = 12 # A R N D C Q E G H I L K M F P S T W Y V B Z X A 3 -3 -1 0 -3 -1 0 1 -3 -1 -3 -2 -2 -4 1 1 1 -7 -4 0 0 -1 -1 R -3 6 -1 -3 -4 1 -3 -4 1 -2 -4 2 -1 -5 -1 -1 -2 1 -5 -3 -2 -1 -2 N -1 -1 4 2 -5 0 1 0 2 -2 -4 1 -3 -4 -2 1 0 -4 -2 -3 3 0 -1 D 0 -3 2 5 -7 1 3 0 0 -3 -5 -1 -4 -7 -3 0 -1 -8 -5 -3 4 3 -2 C -3 -4 -5 -7 9 -7 -7 -4 -4 -3 -7 -7 -6 -6 -4 0 -3 -8 -1 -3 -6 -7 -4 Q -1 1 0 1 -7 6 2 -3 3 -3 -2 0 -1 -6 0 -2 -2 -6 -5 -3 0 4 -1 E 0 -3 1 3 -7 2 5 -1 -1 -3 -4 -1 -3 -7 -2 -1 -2 -8 -5 -3 3 4 -1 G 1 -4 0 0 -4 -3 -1 5 -4 -4 -5 -3 -4 -5 -2 1 -1 -8 -6 -2 0 -2 -2 H -3 1 2 0 -4 3 -1 -4 7 -4 -3 -2 -4 -3 -1 -2 -3 -3 -1 -3 1 1 -2 I -1 -2 -2 -3 -3 -3 -3 -4 -4 6 1 -3 1 0 -3 -2 0 -6 -2 3 -3 -3 -1 L -3 -4 -4 -5 -7 -2 -4 -5 -3 1 5 -4 3 0 -3 -4 -3 -3 -2 1 -4 -3 -2 K -2 2 1 -1 -7 0 -1 -3 -2 -3 -4 5 0 -7 -2 -1 -1 -5 -5 -4 0 -1 -2 M -2 -1 -3 -4 -6 -1 -3 -4 -4 1 3 0 8 -1 -3 -2 -1 -6 -4 1 -4 -2 -2 F -4 -5 -4 -7 -6 -6 -7 -5 -3 0 0 -7 -1 8 -5 -3 -4 -1 4 -3 -5 -6 -3 P 1 -1 -2 -3 -4 0 -2 -2 -1 -3 -3 -2 -3 -5 6 1 -1 -7 -6 -2 -2 -1 -2 S 1 -1 1 0 0 -2 -1 1 -2 -2 -4 -1 -2 -3 1 3 2 -2 -3 -2 0 -1 -1 T 1 -2 0 -1 -3 -2 -2 -1 -3 0 -3 -1 -1 -4 -1 2 4 -6 -3 0 0 -2 -1 W -7 1 -4 -8 -8 -6 -8 -8 -3 -6 -3 -5 -6 -1 -7 -2 -6 12 -2 -8 -6 -7 -5 Y -4 -5 -2 -5 -1 -5 -5 -6 -1 -2 -2 -5 -4 4 -6 -3 -3 -2 8 -3 -3 -5 -3 V 0 -3 -3 -3 -3 -3 -3 -2 -3 3 1 -4 1 -3 -2 -2 0 -8 -3 5 -3 -3 -1 B 0 -2 3 4 -6 0 3 0 1 -3 -4 0 -4 -5 -2 0 0 -6 -3 -3 4 2 -1 Z -1 -1 0 3 -7 4 4 -2 1 -3 -3 -1 -2 -6 -1 -1 -2 -7 -5 -3 2 4 -1 X -1 -2 -1 -2 -4 -1 -1 -2 -2 -1 -2 -2 -2 -3 -2 -1 -1 -5 -3 -1 -1 -1 -2 fasta36-36.3.8i_14-Nov-2020/data/pam250.mat000066400000000000000000000036031433453312700173070ustar00rootroot00000000000000# # This matrix was produced by "pam" Version 1.0.6 [28-Jul-93] # # PAM 250 substitution matrix, scale = ln(2)/3 = 0.231049 # # Expected score = -0.844, Entropy = 0.354 bits # # Lowest score = -8, Highest score = 17 # A R N D C Q E G H I L K M F P S T W Y V B Z X A 2 -2 0 0 -2 0 0 1 -1 -1 -2 -1 -1 -3 1 1 1 -6 -3 0 0 0 0 R -2 6 0 -1 -4 1 -1 -3 2 -2 -3 3 0 -4 0 0 -1 2 -4 -2 -1 0 -1 N 0 0 2 2 -4 1 1 0 2 -2 -3 1 -2 -3 0 1 0 -4 -2 -2 2 1 0 D 0 -1 2 4 -5 2 3 1 1 -2 -4 0 -3 -6 -1 0 0 -7 -4 -2 3 3 -1 C -2 -4 -4 -5 12 -5 -5 -3 -3 -2 -6 -5 -5 -4 -3 0 -2 -8 0 -2 -4 -5 -3 Q 0 1 1 2 -5 4 2 -1 3 -2 -2 1 -1 -5 0 -1 -1 -5 -4 -2 1 3 -1 E 0 -1 1 3 -5 2 4 0 1 -2 -3 0 -2 -5 -1 0 0 -7 -4 -2 3 3 -1 G 1 -3 0 1 -3 -1 0 5 -2 -3 -4 -2 -3 -5 0 1 0 -7 -5 -1 0 0 -1 H -1 2 2 1 -3 3 1 -2 6 -2 -2 0 -2 -2 0 -1 -1 -3 0 -2 1 2 -1 I -1 -2 -2 -2 -2 -2 -2 -3 -2 5 2 -2 2 1 -2 -1 0 -5 -1 4 -2 -2 -1 L -2 -3 -3 -4 -6 -2 -3 -4 -2 2 6 -3 4 2 -3 -3 -2 -2 -1 2 -3 -3 -1 K -1 3 1 0 -5 1 0 -2 0 -2 -3 5 0 -5 -1 0 0 -3 -4 -2 1 0 -1 M -1 0 -2 -3 -5 -1 -2 -3 -2 2 4 0 6 0 -2 -2 -1 -4 -2 2 -2 -2 -1 F -3 -4 -3 -6 -4 -5 -5 -5 -2 1 2 -5 0 9 -5 -3 -3 0 7 -1 -4 -5 -2 P 1 0 0 -1 -3 0 -1 0 0 -2 -3 -1 -2 -5 6 1 0 -6 -5 -1 -1 0 -1 S 1 0 1 0 0 -1 0 1 -1 -1 -3 0 -2 -3 1 2 1 -2 -3 -1 0 0 0 T 1 -1 0 0 -2 -1 0 0 -1 0 -2 0 -1 -3 0 1 3 -5 -3 0 0 -1 0 W -6 2 -4 -7 -8 -5 -7 -7 -3 -5 -2 -3 -4 0 -6 -2 -5 17 0 -6 -5 -6 -4 Y -3 -4 -2 -4 0 -4 -4 -5 0 -1 -1 -4 -2 7 -5 -3 -3 0 10 -2 -3 -4 -2 V 0 -2 -2 -2 -2 -2 -2 -1 -2 4 2 -2 2 -1 -1 -1 0 -6 -2 4 -2 -2 -1 B 0 -1 2 3 -4 1 3 0 1 -2 -3 1 -2 -4 -1 0 0 -5 -3 -2 3 2 -1 Z 0 0 1 3 -5 3 3 0 2 -2 -3 0 -2 -5 0 0 -1 -6 -4 -2 2 3 -1 X 0 -1 0 -1 -3 -1 -1 -1 -1 -1 -1 -1 -1 -2 -1 0 0 -4 -2 -1 -1 -1 -1 fasta36-36.3.8i_14-Nov-2020/data/rna.mat000066400000000000000000000017461433453312700170710ustar00rootroot00000000000000# Sample rna matrix with +2 for G:A, TU:C A C G T U R Y M W S K D H V B N X A 5 -4 2 -4 -4 2 -1 1 1 -1 -1 1 1 1 -2 -1 -1 C -4 5 -4 2 2 -1 1 1 -1 1 -1 -2 1 1 1 -1 -1 G -4 -4 5 -4 -4 1 -1 -1 -1 1 1 1 -2 1 1 -1 -1 T -4 -4 -4 5 5 -1 2 -1 1 -1 1 1 1 -2 1 -1 -1 U -4 -4 -4 5 5 -1 2 -1 1 -1 1 1 1 -2 1 -1 -1 R 2 -1 2 -1 -1 2 -2 -1 1 1 1 1 -1 1 -1 -1 -1 Y -1 2 -1 2 2 -2 2 -1 1 1 1 -1 1 -1 1 -1 -1 M 1 1 -1 -1 -1 -1 -1 2 1 1 -1 -1 1 1 -1 -1 -1 W 1 -1 -1 1 1 1 1 1 1 -1 1 1 1 -1 -1 -1 -1 S -1 1 1 -1 -1 1 1 1 -1 2 1 -1 -1 1 1 -1 -1 K -1 -1 1 1 1 1 1 -1 1 1 2 1 -1 -1 1 -1 -1 D 1 -2 1 1 1 1 -1 -1 1 -1 1 1 -1 -1 -1 -1 -1 H 1 1 -2 1 1 -1 1 1 1 -1 -1 -1 1 -1 -1 -1 -1 V 1 1 1 -2 -2 1 -1 1 -1 1 -1 -1 -1 1 -1 -1 -1 B -2 1 1 1 1 -1 1 -1 -1 1 1 -1 -1 -1 1 -1 -1 N -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 fasta36-36.3.8i_14-Nov-2020/data/vtml160.mat000066400000000000000000000053231433453312700175150ustar00rootroot00000000000000# # VTML160 # # This matrix was produced with scripts written by # Tobias Mueller and Sven Rahmann [June-2001]. # # VTML160 substitution matrix, Units = Third-Bits # Expected Score = -1.297840 Third-Bits # Lowest Score = -7, Highest Score = 16 # # Entropy H = 0.562489 Bits # # 30-Jun-2001 A R N D C Q E G H I L K M F P S T W Y V B Z X * A 5 -2 -1 -1 1 -1 -1 0 -2 -1 -2 -1 -1 -3 0 1 1 -5 -3 0 -1 -1 0 -7 R -2 7 0 -3 -3 2 -1 -3 1 -4 -3 4 -2 -5 -2 -1 -1 -4 -3 -4 -2 0 0 -7 N -1 0 7 3 -3 0 0 0 1 -4 -4 0 -3 -5 -2 1 0 -5 -2 -4 5 0 0 -7 D -1 -3 3 7 -5 1 3 -1 0 -6 -6 0 -5 -7 -1 0 -1 -7 -5 -4 6 3 0 -7 C 1 -3 -3 -5 13 -4 -5 -2 -2 -1 -4 -4 -1 -4 -3 1 0 -7 -1 1 -4 -5 0 -7 Q -1 2 0 1 -4 6 2 -3 2 -4 -2 2 -1 -4 -1 0 -1 -6 -4 -3 0 4 0 -7 E -1 -1 0 3 -5 2 6 -2 -1 -5 -4 1 -3 -6 -1 0 -1 -7 -3 -3 2 5 0 -7 G 0 -3 0 -1 -2 -3 -2 8 -3 -7 -6 -2 -5 -6 -3 0 -2 -5 -5 -5 -1 -2 0 -7 H -2 1 1 0 -2 2 -1 -3 9 -4 -3 0 -3 0 -2 -1 -1 -1 3 -3 0 0 0 -7 I -1 -4 -4 -6 -1 -4 -5 -7 -4 6 3 -4 2 0 -4 -3 -1 -2 -2 4 -5 -4 0 -7 L -2 -3 -4 -6 -4 -2 -4 -6 -3 3 6 -3 4 2 -3 -3 -2 -1 -1 2 -5 -3 0 -7 K -1 4 0 0 -4 2 1 -2 0 -4 -3 5 -2 -5 -1 -1 -1 -5 -3 -3 0 2 0 -7 M -1 -2 -3 -5 -1 -1 -3 -5 -3 2 4 -2 8 1 -4 -3 -1 -4 -2 1 -4 -3 0 -7 F -3 -5 -5 -7 -4 -4 -6 -6 0 0 2 -5 1 9 -5 -3 -3 3 6 -1 -6 -5 0 -7 P 0 -2 -2 -1 -3 -1 -1 -3 -2 -4 -3 -1 -4 -5 9 0 -1 -5 -6 -3 -2 -1 0 -7 S 1 -1 1 0 1 0 0 0 -1 -3 -3 -1 -3 -3 0 4 2 -4 -2 -2 1 0 0 -7 T 1 -1 0 -1 0 -1 -1 -2 -1 -1 -2 -1 -1 -3 -1 2 5 -6 -3 0 0 -1 0 -7 W -5 -4 -5 -7 -7 -6 -7 -5 -1 -2 -1 -5 -4 3 -5 -4 -6 16 4 -5 -6 -7 0 -7 Y -3 -3 -2 -5 -1 -4 -3 -5 3 -2 -1 -3 -2 6 -6 -2 -3 4 10 -3 -3 -4 0 -7 V 0 -4 -4 -4 1 -3 -3 -5 -3 4 2 -3 1 -1 -3 -2 0 -5 -3 5 -4 -3 0 -7 B -1 -2 5 6 -4 0 2 -1 0 -5 -5 0 -4 -6 -2 1 0 -6 -3 -4 5 2 0 -7 Z -1 0 0 3 -5 4 5 -2 0 -4 -3 2 -3 -5 -1 0 -1 -7 -4 -3 2 5 0 -7 X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -7 * -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 1 fasta36-36.3.8i_14-Nov-2020/doc/000077500000000000000000000000001433453312700154325ustar00rootroot00000000000000fasta36-36.3.8i_14-Nov-2020/doc/INSTALL000066400000000000000000000005631433453312700164670ustar00rootroot00000000000000 22-Jan-2014 fasta36/doc/INSTALL To compile the FASTA programs, change to the fasta36/src directory: cd ~/fasta36/src and type: make -f ../make/Makefile.linux64_sse2 all The file fasta36/make/README gives more information about the different Makefiles available. The code is routinely compiled and tested under Linux (64-bit, sse2) and MacOS X (64-bit, sse2). fasta36-36.3.8i_14-Nov-2020/doc/README.versions000066400000000000000000000042031433453312700201600ustar00rootroot00000000000000 $Id: README.versions 120 2010-01-31 19:42:09Z wrp $ $Revision: 210 $ January, 2010 This directory contains the newest version of FASTA, version 36. FASTA36 is a major update to FASTA35 that provides the ability to display multiple significant alignments to a query sequence. Previous versions of FASTA displayed only the best alignment between the query and library sequence; if the library sequence was long, with multiple similar regions, only the best was shown. This contrasts with BLAST, which has always displayed multiple "HSPs" when they are present. FASTA36 provides some additional improvements; like BLAST, it now uses statistical estimates to set thresholds for band optimization, which can increase search speed as much as 2-fold, and it provides much more flexibility in specifying the files that are searched (indirect files of filenames can include additional indirection). But the main improvement is the display of multiple HSPs. All of the traditional alignment programs: ssearch36, fasta36, [t]fast[xy]36 and glsearch36 display multiple HSPs. The peptide and mixed peptide alignment programs ([t]fasts36, fastf36, fastm36) still show a single HSP. Currently, the PVM/MPI parallel versions of the programs still display a single HSP. As of late 2007, there is almost no reason to use the fasta2 programs; the major programs present in fasta2 that were not present in fasta3 (version 34) -- align (global alignments) and lalign (non-overlapping local alignments) are now available in fasta version 36. For more information about the programs in the current FASTA v36 package, see the "changes_v36.html" and "readme.v36" files. There are still a very few programs in the fasta2 package that are not available in the fasta3 package - programs for global alignments without end-gap penalties, the "grease" Kyte-Doolittle plot, and "garnier" and "chofas" for classic (but inaccurate) secondary structure prediction. You should not use the fasta2 programs for library searching; the fasta3 programs are more sensitive and have better statistics. Precompiled versions of the programs for Windows and MacOS are available in the executables directory. fasta36-36.3.8i_14-Nov-2020/doc/README_sql.md000066400000000000000000000015751433453312700176000ustar00rootroot00000000000000## Sequence libraries in relational databases This has been tested in Debian 10 (Buster). ### Library file example ``` : DO SELECT 1; SELECT id,seq FROM sequences; SELECT description FROM sequences WHERE id=#; SELECT seq FROM sequences WHERE id=#; ``` ### PostgreSQL To compile the FASTA programs: * install the package `libpq-dev` (`sudo apt-get install libpq-dev`) * `cd src` and `make -f ../make/Makefile.linux_pgsql all` Program execution example: ``` ../bin/fasta36 -q ../seq/mgstm1.aa "/path/to/library_file 17" ``` ### MariaDB (fork of MySQL) To compile the FASTA programs: * install the package `libmariadb-dev` (`sudo apt-get install libmariadb-dev`) * `cd src` and `make -f ../make/Makefile.linux_mariadb all` Program execution example: ``` ../bin/fasta36 -q ../seq/mgstm1.aa "/path/to/library_file 16" ```fasta36-36.3.8i_14-Nov-2020/doc/README_v36.3.8d.md000066400000000000000000000027661433453312700200750ustar00rootroot00000000000000 ## The FASTA package - protein and DNA sequence similarity searching and alignment programs Changes in **fasta-36.3.8d** released 13-April-2016: 1. Various bug fixes to `pssm_asn_subs.c` that avoid coredumps when reading NCBI PSSM ASN.1 binary files. `pssm_asn_subs.c` can now read IUPACAA sequences. 2. default gap penalties for VT40 (from -14/-2 to -13/-1), VT80 (from -14/-2 to -11/-1), and VT120 (from -10/-1 to 11/-1) have changed slightly. 3. Introduction of `scripts/m9B_btop_msa.pl` and `scripts/m8_btop_msa.pl`, which uses the BTOP (`-m 9B` or `-m 8CB`) encoded alignment strings to produce a query driving multiple sequence alignment (MSA) in ClustalW format. This MSA can be used as input to `psiblast` to produce an ASN.1 PSSM. 4. The `scripts/annot_blast_btop2.pl` script replaces `scripts/annot_blast_btop.pl` and allows annotation of both the query and subject sequences. 5. Various domain annotation scripts have been renamed for clarity. For example, `ann_feats_up_sql.pl` uses an SQL implementation of Uniprot features tables to annotate domains. Likewise, `ann_pfam_www.pl` gets domain information from the Pfam web site, while `ann_pfam27.pl` gets the information from the downloaded Pfam27 mySQL tables, and `ann_pfam28.pl` uses the Pfam28 mySQL tables. 6. percent identity in sub-alignment scores is calculated like a BLAST percent identity -- gaps are not included in the denominator. For more detailed information, see `doc/readme.v36`. fasta36-36.3.8i_14-Nov-2020/doc/README_v36.3.8i.md000066400000000000000000000302251433453312700200710ustar00rootroot00000000000000 ## The FASTA package - protein and DNA sequence similarity searching and alignment programs This directory contains the source code for the FASTA package of programs (W. R. Pearson and D. J. Lipman (1988), "Improved Tools for Biological Sequence Analysis", *PNAS 85:2444-2448*). The current verion of the program is `fasta-36.3.8i`. If you are reading this at [fasta.bioch.virginia.edu/wrpearson/fasta/fasta36](https://fasta.bioch.virginia.edu/wrpearson/fasta/fasta36), links are available to executable binaries for Linux, MacOS, and Windows. The source code is also available from [github.com/wrpearson/fasta36](https://github.com/wrpearson/fasta36). The FASTA package offers many of the same programs as `BLAST`, but takes a different approach to statistical estimates, and provides additional optimal programs for local (`ssearch36`) and global (`ggsearch36`, `glsearch36`) alignment, and for non-overlapping internal local alignments (`lalign36`). The programs available include:

FASTA BLAST description

fasta36 blastp/blastn Protein and DNA local similarity search
ssearch36 optimal Smith-Waterman search -- vectorized on Intel and Arm architectures
ggsearch36 optimal global Needleman-Wunsche search -- vectorized on Intel and Arm architectures
glsearch36 optimal global(query)/local (library) search -- vectorized on Intel and Arm architectures
fastx36 / fasty36 blastx DNA query search against protein sequence database. (fasty36 uses a slower, more sophisticated frame shift aligner)
tfastx36 / tfasty36 tblastn protein query search against DNA database

fastf36 / tfastf36 compares an ordered peptide mixture against a protein (fastf36) or DNA (tfastf36) database
fastm36 / tfastm36 compares a set of ordered peptide against a protein (fastf36) or DNA (tfastf36) database or oligonucleotides against a DNA database
fasts36 / tfasts36 compares an unordered set of peptides against a protein (fasts36) or DNA (tfasts36) database

lalign36 look for non-overlapping internal alignments, similar to a "dot-plot," but with statistical signficance

Changes in **fasta-36.3.8i** Nov, 2022 1. bug fix to remove duplicate variant annotations 2. update to scripts/get_protein.py and annotation scripts. 3. modify code to reduce mktemp compilation warning messages 4. changes to annotation scripts for Pfam shutdown; new ann_pfam_www.py, ann_pfam_sql.py 5. a new option, `r` for `-m 8CB` that displays the raw optimal alignment score (typically Smith-Waterman). Changes in **fasta-36.3.8i** Sept, 2021 1. Enable translation table -t 9 for Echinoderms. This bug has existed since alternate translation tables were first made available. Changes in **fasta-36.3.8i** May, 2021 1. Add an option, -Xg, that preserves the gi|12345 string the score summary and alignment output. Changes in **fasta-36.3.8i** Nov, 2020 1. fasta-36.3.8i (November, 2020) incorporates the SIMDe (SIMD-everywhere, https://github.com/simd-everywhere/simde/blob/master/simde/x86/sse2.h) macro definitions that allow the smith\_waterman\_sse2.c, global\_sse2.c, and glocal\_sse2.c code to be compiled on non-Intel architectures (currently tested on ARM/NEON). Many thanks to Michael R. Crusoe (https://orcid.org/0000-0002-2961-9670) for the SIMDE code converstion, and to Evan Nemerson for creating SIMDe. 2. The code to read FASTA format sequence files now ignores lines with '#' at the beginning, for compatibility with PSI Extended FASTA Format (PEFF) files (http://www.psidev.info/peff). Changes in **fasta-36.3.8h** May, 2020 1. fasta-36.3.8h (May 2020) fixes a bug that appeared when multiple query sequences were searched against a large library that would not fit in memory. In that case, the number of library sequences and residues increased by the library size with each new search. 2. More consistent formats for **ERROR** and **Warning** messages. 3. Corrections to code to address compiler warnings with gcc8/9. 4. addition of 's' option to show similarity in -m8CBls (or -m8CBs, -m8CBsl) and 'd' option to show raw (unaligned) domain information. Changes in **fasta-36.3.8h** February, 2020 1. The license for Michael Farrar's Smith-Waterman sse2 code and global/glocal sse2 code is now open source (BSD), see COPYRIGHT.sse2 for details. Changes in **fasta-36.3.8h** August, 2019 1. Modifications to support makeblastdb format v5 databases. Currently, only simple database reads have been tested. Changes in **fasta-36.3.8h** March, 2019 1. Translation table 1 (`-t 1`) now translates 'TGA'->'U' (selenocysteine). 2. New script for extracting DNA sequences from genomes (`scripts/get_genome_seq.py`). Currently works with human (hg38), mouse (mm10), and rat (rn6). Changes in **fasta-36.3.8h** January, 2019 1. Bug fixes: `fastx`/`tfastx` searches done with the `-t t` option (which adds a `*` to protein sequences so that termination codons can be matched), did not work properly with the `VT` series of matrices, particularly `VT10`. This has been fixed. 2. New features: Both query and library/subject sequences can be generated by specifying a program script, either by putting a `!` at the start of the query/subject file name, or by specifying library type `9`. Thus, `fasta36 \\!../scripts/get_protein.py+P09488+P30711 /seqlib/swissprot.fa` or `fasta36 "../scripts/get_protein.py+P09488+P30711 9" /seqlib/swissprot.fa` will compare two query sequences, `P09488` and `P30711`, to SwissProt, by downloading them from Uniprot using the `get_protein.py` script (which can download sequences using either Uniprot or RefSeq protein accessions). Often, the leading `!` must be escaped from shell interpretation with `\\!`. New scripts that return FASTA sequences using accessions or genome coordinates are available in `scripts/`. `get_protein.py`, `get_uniprot.py`, `get_up_prot_iso_sql.py` and `get_refseq.py`. `get_refseq.py` can download either protein or mRNA RefSeq entries. `get_up_prot_iso_sql.py` retrieves a protein and its isoforms from a MySQL database. `get_genome_seq.py` extracts genome sequences using coordinates from local reference genomes (`hg38` and `mm10` included by default). Changes in **fasta-36.3.8h** December, 2018 The `scripts/ann_exons_up_www.pl` and `ann_exons_up_sql.pl` now include the option `--gen_coord` which provides the associated genome coordinate (including chromosome) as a feature, indicated by `'<'` (start of exon) and `'>'` (end of exon). Changes in **fasta-36.3.8h** released November, 2018 **fasta-36.3.8h** provides new scripts and modifications to the `fasta` programs that normalize the process of merging sub-alignment scores and region information into both FASTA and BLAST results. To move BLASTP towards FASTA with respect to alignment annotation and sub-alignment scoring: 1. The `blastp_annot_cmd.sh` runs a blast search, finds and scores domain information for the alignments, and merges this information back into the blast output `.html` file. This script uses: 1. `annot_blast_btab2.pl --query query.file --ann_script annot_script.pl --q_ann_script annot_script.pl blast.btab_file > blast.btab_file_ann` (a blast tabular file with one or two new fields, an annotation field and (optionally with --dom_info) a raw domain content field. 2. `merge_blast_btab.pl --btab blast.btab_file_ann blast.html > blast_ann.html` (merge the annotations and domain content information in the `blast.btab_file_ann` file together with the standard blast output file to produce annotated alignments. 3. In addition, `rename_exons.py` is available to rename exons (later other domains) in the subject sequences to match the exon labeling in the aligned query sequence. 4. `relabel_domains.py` can be used to adjust color sets for homologous domains. 2. There is also an equivalent `fasta_annot_cmd.sh` script that provides similar funtionality for the FASTA programs. This script does not need to use `annot_blast_btab2.pl` to produce domain subalignment scores (that functionality is provided in FASTA), but it also can use `merge_fasta_btab.pl` and `rename_exons.py` to modify the names of the aligned exons/domains in the subject sequences. 3. To support the independence of the `blastp`/`fasta` output from html annotation, the FASTA package includes some new options: 1. The `-m 8CBL` option includes query sequence length and subject sequence length in the blast tabular output. In addition, if domain annotations are available, the raw domain coordinates are provided in an additional field after the annotation/subalignment scoring field. `-m 8CBl` provides the sequence lengths, but does not add the raw domain coordinates. 2. The `-Xa` option prevents annotation information from being included in the html output -- it is only available in the `-m 8CB` (or `-m 8CBL/l`) output 3. To reduce problems with spaces in script arguements, annotation scripts with spaces separating arguments can use '+' instead of ' '. 4. The `fasta_annot_cmd.sh` script produces both a conventional alignment on `stdout` and a `-m 8CBL` alignment, which is sent to a separate file, which is separated from the `-m F8CBL` option with a `=`, thus `-m F8CBL=tmp_output.blast_tab`. Changes in **fasta-36.3.8g** released 23-Oct-2018 1. (Oct. 2018) Improvements to scripts in the `psisearch2/` directory: 1. `psisearch2/m89_btop_msa2.pl` 1. the `--clustal` option produces a "CLUSTALW (1.8)", which is required for some downstream programs 2. the `--trunc_acc` option removes the database and accession from identifiers of the form: `sp|P09488|GSTM1_HUMAN` to produce `GSTM1_HUMAN`. 3. the `--min_align` option specifies the fraction of the query sequence that must be aligned `(q_end-q_start+1)/q_length)` Together, these changes make it possible for the output of `m89_btop_msa2.pl` to be used by the EMBOSS program `fprotdist`. 2. A more general implementation of `psisearch2_msa_iter.sh`, which does `psisearch2` one iteration at a time, and a new equivalent `psisearch2_msa_iter_bl.sh`, which uses `psiblast` to do the search. * (Oct. 2018) A small restructuring of the `make/Makefiles` to remove the `-lz` dependence for non-debugging scripts (and add it back when -DDEBUG is used). Changes in **fasta-36.3.8g** released 5-Aug-2018 1. (Apr 2018) incorporation of `-t t1` termination codes ("*") in `-m 8CB`, `-m 8CC`, and `-m9C` so that aligned termination codons are indicated as `**` (`-m8CB`) or `*1` (`-m8CC`, `-m9C`). 2. (Mar 2018) Updates to scripts/annot_blast_btop2.pl to provide subalignment scoring for blastp searches (BLOSUM62 only). (see doc/readme.v36) 3. (Feb. 2018) a new extended option, `-XB`, which causes percent identity, percent similarity, and alignment length to be calculated using the BLAST model, which does not count gaps in the alignment length. see readme.v36 for other bug fixes. Changes in **fasta-36.3.8g** released 31-Dec-2017 1. (December, 2017) -- Make statistical thresholds more robust for small E()-values with normally distributed scores (`ggsearch36`,`glsearch36`). 2. (September, 2017) Treat lower-case queries with no upper-case residues as uppercase with `-S` option. 3. (May, 2017) Improvements/fixes to sub-alignment scoring strategies. 4. Improvements/fixes to psisearch2 scripts. For more detailed information, see `doc/readme.v36`. fasta36-36.3.8i_14-Nov-2020/doc/changes_v34.html000066400000000000000000000336331433453312700204340ustar00rootroot00000000000000 ChangeLog - FASTA v34

ChangeLog - FASTA v34

 $Id: changes_v34.html 120 2010-01-31 19:42:09Z wrp $
 $Revision: 210 $

May 28, 2007

Small modification for GCG ASCII (libtype=5) header line.

October 6, 2006 CVS fa34t26b3

New Windows programs available using Intel C++ compiler. First threaded programs for Windows; first SSE2 acceleration of SSEARCH for Windows.

July 18, 2006 CVS fa34t26b2

More powerful environment variable substitutions for FASTLIBS files. The library file name parsing programs now provide the option for environment variable substitions. For example, SLIB2=/slib2 as an environment variable (e.g. export SLIB2=/slib2 for ksh and bash), then
fasta34 -q query.aa '${SLIB2}/swissprot.fa'  expands as expected.
While this is not important for command lines, where the Unix shell would expand things anyway, it is very helpful for various configuration files, such as files of file names, where:
<${SLIB2}/blast
swissprot.fa
now expands properly, and in FASTLIBS files the line:
NCBI/Blast Swissprot$0S${SLIB2}/blast/swissprot.fa
expands properly. Currently, Environment variable expansion only takes place for library file names, and the <directory in a file of file names.

July 2, 2006 fa34t26b0

This release provides an extremely efficient SSE2 implementation of the Smith-Waterman algorithm for the SSE2 vector instructions written by Michael Farrar (farrar.michael@gmail.com). The SSE code speeds up Smith-Waterman 8 - 10-fold in my tests, making it comparable to Eric Lindahl's Altivec code for the Apple/IBM G4/G5 architecture.

May 24, 2006 fa34t25d8

In addition, support for ASN.1 PSSM:2 files provided by the NCBI PSI-BLAST WWW site is included. This code will not work with iteration 0 PSSM's (which have no PSSM information). For ASN.1 PSSM's, which provide the matrix name (and in some cases the gap penalties), the scoring matrix and gap penalties are set appropriately if they were not specified on the command line. ASN.1 PSSM's are type 2:
ssearch34 -P "pssm.asn1 2" .....

May 18, 2006

Support for NCBI Blast formatdb databases has been expanded. The FASTA programs can now read some NCBI *.pal and *.nal files, which are used to specify subsets of databases. Specifically, the swissprot.00.pal and pdbaa.00.pal files are supported. FASTA supports files that refer to *.msk files (i.e. swissprot.00.pal refers to swissprot.00.msk); it does not currently support .pal files that simply list other .pal or database files (e.g. FASTA does not support nr.pal or swissprot.pal).

Nov 20, 2005

Changes to support asymmetric matrices - a scoring matrix read in from a file can be asymmetric. Default matrices are all symmetric.

Sept 2, 2005

The prss34 program has been modified to use the same display routines as the other search programs. To be more consistent with the other programs, the old "-w shuffle-window-size" is now "-v window-size". prss34/prfx34 will also show the optimal alignment for which the significance is calculated by using the "-A" option. Since the new program reports results exactly like other fasta/ssearch/fastxy34 programs, parsing for statistical significance is considerably different. The old format program can be make using "make prss34o".

May 5, 2005 CVS fa34t25d1

Modification to the -x option, so that both an "X:X" match score and an "X:not-X" mismatch score can be specified. (This score is also used to give a positive score to a "*:*" match - the end of a reading frame, while giving a negative score to "*:not-*".

Jan 24, 2005

Include a new program, "print_pssm", which reads a blastpgp binary checkpoint file and writes out the frequency values as text. These values can be used with a new option with ssearch34(_t) and prss34, which provides the ability to read a text PSSM file. To specify a text PSSM, use the option -P "query.ckpt 1" where the "1" indicates a text, rather than a binary checkpoint file. "initfa.c" has also been modified to work with PSSM files with zero's in the in the frequency table. Presumably these positions (at the ends) do not provide information. (Jan 26, 2005) blastpgp actually uses BLOSUM62 values when zero frequencies are provided, so read_pssm() has been modified to use scoring matrix values for zero frequencies as well.

Nov 4-8, 2004

Incorporation of Erik Lindahl "anti-diagonal" Altivec code for Smith-Waterman, only. Altivec SSEARCH is now faster than FASTA for

Aug 25,26, 2004 CVS fa34t24b3

Small change in output format for p34comp* programs in ">>>query_file#1 string" line before alignments. This line is not present in the non-parallel versions - it would be better for them to be consistent.

Dec 10, 2003 CVS fa34t23b3

Cause default ktup to drop for short query sequences. For protein queries < 50, ktup=1; for DNA queries < 20, 50, 100 ktup = 1, 2, 3, respectively.

Dec 7, 2003

A new option, "-U" is available for RNA sequence comparison. "-U" functions like "-n", indicating that the query is an RNA sequence. In addition, to account for "G:U" base pairs, "-U" modifies the scoring matrices so that a "G:A" match has the same score as a "G:G" match, and "T:C" match has the same score as a "T:T" match.

Nov 2, 2003

Support for more sophisticated display options. Previously, one could have only on "-m #" option, even though several of the options were orthogonal (-m 9c is independent of -m 1 and -m2, which is independent of -m 6 (HTML)). In particular -m 9c can be combined with -m 6, which can be very helpful for runs that need HTML output but can also exploit the encoding provided by -m 9c. The "-m 9" option now also allows "-m 9i", which shows the standard best score information, plus percent identity and alignment length.

Sept 25, 2003

A new option is available for annotating alignments. -V '@#?!' can be used to annotate sites in a sequence, e.g:
>GTM1_HUMAN ...
PMILGYWDIRGLAHAIRLLLEYTDS@S?YEEKKYT@MG
DAPDYDRS@QWLNEKFKLGLDFPNLPYLIDGAHKIT
might mark known and expected (S,T) phosphorylation sites. These symbols are then displayed on the query coordinate line:
               10        20    @?  30  @     40  @     50        60
GTM1_H PMILGYWDIRGLAHAIRLLLEYTDSSYEEKKYTMGDAPDYDRSQWLNEKFKLGLDFPNLP
       ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
gtm1_h PMILGYWDIRGLAHAIRLLLEYTDSSYEEKKYTMGDAPDYDRSQWLNEKFKLGLDFPNLP
               10        20        30        40        50        60
This annotation is mostly designed to display post-translational modifications detected by MassSpec with FASTS, but is also available with FASTA and SSEARCH.

June 16, 2003 version: fasta34t22

ssearch34 now supports PSI-BLAST PSSM/profiles. Currently, it only supports the "checkpoint" file produced by blastall, and only on certain architectures where byte-reordering is unnecessary. It has not been tested extensively with the -S option.
ssearch34 -P blast.ckpt -f -11 -g -1 -s BL62 query.aa library
Will use the frequency information in the blast.chkpt file to do a position specific scoring matrix (PSSM) search using the Smith-Waterman algorithm. Because ssearch34 calculates scores for each of the sequences in the database, we anticipate that PSSM ssearch34 statistics will be more reliable than PSI-Blast statistics. The Blast checkpoint file is mostly double precision frequency numbers, which are represented in a machine specific way. Thus, you must generate the checkpoint file on the same machine that you run ssearch34 or prss34 -P query.ckpt. To generate a checkpoint file, run:
blastpgp -j 2 -h 1e-6 -i query.fa -d swissprot -C query.ckpt -o /dev/null
(This searches swissprot for 2 iterations ("-j 2" using a E() threshold 1e-6 saving the resulting position specific frequencies in query.ckpt. Note that the original query.fa and query.ckpt must match.)

Apr 11, 2003 CVS fa34t21b3

Fixes for "-E" and "-F" with ssearch34, which was inadvertantly disabled.

A new option, "-t t", is available to specify that all the protein sequences have implicit termination codons "*" at the end. Thus, all protein sequences are one residue longer, and full length matches are extended one extra residue and get a higher score. For fastx34/tfastx34, this helps extend alignments to the very end in cases where there may be a mismatch at the C-terminal residues.

-m 9c has also been modified to indicate locations of termination codons ( *1).

Mar 17, 2003 CVS fa34t21b2

A new option on scoring matrices "-MS" (e.g. "BL50-MS") can be used to turn the I/L, K/Q identities on or off. Thus, to make "fastm34" use the isobaric identities, use "-s M20-MS". To turn them off for "fasts34", use "-s M20".

Jan 25, 2003

Add option "-J start:stop" to pv34comp*/mp34comp*. "-J x" used to allow one to start at query sequence "x"; now both start and stop can be specified.

Nov 14-22, 2002 CVS fa34t20b6

Include compile-time define (-DPGM_DOC) that causes all the fasta programs to provide the same command line echo that is provided by the PVM and MPI parallel programs. Thus, if you run the program:
fasta34_t -q -S gtt1_drome.aa /slib/swissprot 12
the first lines of output from FASTA will be:
# fasta34_t -q gtt1_drome.aa /slib/swissprot
 FASTA searches a protein or DNA sequence data bank
  version 3.4t20 Nov 10, 2002
 Please cite:
   W.R. Pearson & D.J. Lipman PNAS (1988) 85:2444-2448
This has been turned on by default in most FASTA Makefiles.

Aug 27, 2002

Modifications to mshowbest.c and drop*.c (and p2_workcomp.c, compacc.c, doinit.c, etc.) to provide more information about the alignment with the -m 9 option. There is now a "-m 9c" option, which displays an encoded alignment after the -m 9 alignment information. The encoding is a string of the form: "=#mat+#ins=#mat-#del=#mat". Thus, an alignment over 218 amino acids with no gaps (not necessarily 100% identical) would be =218. The alignment:
       10        20        30        40        50          60         70  
GT8.7  NVRGLTHPIRMLLEYTDSSYDEKRYTMGDAPDFDRSQWLNEKFKL--GLDFPNLPYL-IDGSHKITQ
       :.::  . :: ::  .   .:::         : .:    ::.:   .: : ..:.. :::  :..:
XURTG  NARGRMECIRWLLAAAGVEFDEK---------FIQSPEDLEKLKKDGNLMFDQVPMVEIDG-MKLAQ
               20        30                 40        50        60        
would be encoded: "=23+9=13-2=10-1=3+1=5". The alignment encoding is with respect to the beginning of the alignment, not the beginning of either sequence. The beginning of the alignment in either sequence is given by the an0/an1 values. This capability is particularly useful for [t]fast[xy], where it can be used to indicate frameshift positions "/#\#" compactly. If "-m 9c" is used, the "The best scores" title line includes "aln_code".

Aug 14, 2002 CVS tag fa34t20

Changes to nmgetlib.c to allow multiple query searches coming from STDIN, either through pipes or input redirection. Thus, the command
cat prot_test.lseg | fasta34 -q -S @ /seqlib/swissprot
produces 11 searches. If you use the multiple query functions, the query subset applies only to the first sequence. Unfortunately, it is not possible to search against a STDIN library, because the FASTA programs do not keep the entire library in memory and need to be able to re-read high-scoring library sequences. Since it is not possible to fseek() against STDIN, searching against a STDIN library is not possible.

Aug 5, 2002

fasts34(_t) and fastm34(_t) have been modified to allow searches with DNA sequences. This gives a new capability to search for DNA motifs, or to search for ordered or unordered DNA sequences spaced at arbitrary distances.

June 25, 2002

Modify the statistical estimation strategy to sample all the sequences in the database, not just the first 60,000. The histogram is still based only on the first 60,000 scores and lengths, though all scores an lengths are shown. The fit to the data may be better than the histogram indicates, but it should not be worse.

June 19, 2002

Added "-C #" option, where 6 <= # <= MAX_UID (20), to specify the length of the sequence name display on the alignment labels. Until now, only 6 characters were ever displayed. Now, up to MAX_UID characters are available.

Mar 16, 2002

Added create_seq_demo.sql, nt_to_sql.pl to show how to build an SQL protein sequence database that can be used with with the mySQL versions of the fasta34 programs. Once the mySQL seq_demo database has been installed, it can be searched using the command:
fasta34 -q mgstm1.aa "seq_demo.sql 16"
mysql_lib.c has been modified to remove the restriction that mySQL protein sequence unique identifiers be integers. This allows the program to be used with the PIRPSD database. The RANLIB() function call has been changed to include "libstr", to support SQL text keys. Due to the size of libstr[], unique ID's must be < MAX_UID (20) characters.

A "pirpsd.sql" file is available for searching the mySQL distribution of the PIRPSD database. PIRPSD is available from ftp://nbrfa.georgetown.edu/pir_databases/psd/mysql.

fasta36-36.3.8i_14-Nov-2020/doc/changes_v35.html000066400000000000000000000210741433453312700204310ustar00rootroot00000000000000 ChangeLog - FASTA v35

ChangeLog - FASTA v35


 $Id: changes_v35.html 120 2010-01-31 19:42:09Z wrp $
 $Revision: 210 $


Summary - Major Changes in FASTA version 35 (August, 2007)

  1. Accurate shuffle based statistics for searches of small libraries (or pairwise comparisons).

  2. Inclusion of lalign35 (SIM) into FASTA3. Accurate statistics for lalign35 alignments. plalign has been replaced by lalign35 and lav2ps.
  3. Two new global alignment programs: ggsearch35 and glsearch35.

February 7, 2008

Allow annotations in library, as well as query sequences. Currently, annotations are only available within sequences (i.e., they are not read from the feature table), but they should be available in FASTA format, or any of the other ascii text formats (EMBL/Swissprot, Genbank, PIR/GCG). If annotations are present in a library and the annotation characters includes '*', then the -V '*' option MUST be used. However, special characters other than '*' are ignored, so annotations of '@', '%', or '@' should be transparent.

In translated sequence comparisons, annotations are only available for the protein sequence.

January 25, 2007

Support protein queries and sequence libraries that contain 'O' (pyrrolysine) and 'U' (selenocysteine). ('J' was supported already). Currently, 'O' is mapped automatically to 'K' and 'U' to 'C'.

Dec. 13, 2007 CVS fa35_03_02m

Add ability to search a subset of a library using a file name and a list of accession/gi numbers. This version introduces a new filetype, 10, which consists of a first line with a target filename, format, and accession number format-type, and optionally the accession number format in the database, followed by a list of accession numbers. For example:

	  </slib2/blast/swissprot.lseg 0:2 4|
	  3121763
	  51701705
	  7404340
	  74735515
	  ...
Tells the program that the target database is swissprot.lseg, which is in FASTA (library type 0) format.

The accession format comes after the ":". Currently, there are four accession formats, two that require ordered accessions (:1, :2), and two that hash the accessions (:3, :4) so they do not need to be ordered. The number and character after the accession format (e.g. "4|") indicate the offset of the beginning of the accession and the character that terminates the accession. Thus, in the typical NCBI Fasta definition line:

 >gi|1170095|sp|P46419|GSTM1_DERPT Glutathione S-transferase (GST class-mu)
The offset is 4 and the termination character is '|'. For databases distributed in FASTA format from the European Bioinformatics Institute, the offset depends on the name of the database, e.g.
 >SW:104K_THEAN Q4U9M9 104 kDa microneme/rhoptry antigen precursor (p104).
and the delimiter is ' ' (space, the default).

Accession formats 1 and 3 expect strings; accession formats 2 and 4 work with integers (e.g. gi numbers).

December 10, 2007

Provide encoded annotation information with -m 9c alignment summaries. The encoded alignment information makes it much simpler to highlight changes in critical residues.

August 22, 2007

A new program is available, lav2svg, which creates SVG (Scalable Vector Graphics) output. In addition, ps_lav, which was introduced May 30, 2007, has been replaced by lav2ps. SVG files are more easily edited with Adobe Illustrator than postscript (lav2ps) files.

July 25, 2007 CVS fa35_02_02

Change default gap penalties for OPTIMA5 matrix to -20/-2 from -24/-4.

July 23, 2007

Add code to support to support sub-sequence ranges for "library" sequences - necessary for fully functional prss (ssearch35) and lalign35. For all programs, it is now possible to specify a subset of both the query and the library, e.g.
lalign35 -q mchu.aa:1-74 mchu.aa:75-148
Note, however, that the subset range applied to the library will be applied to every sequence in the library - not just the first - and that the same subset range is applied to each sequence. This probably makes sense only if the library contains a single sequence (this is also true for the query sequence file).

July 3, 2007 CVS fa35_02_01

Merge of previous fasta34 with development version fasta35.

June 26, 2007

Add amino-acid 'J' for 'I' or 'L'.

Add Mueller and Vingron (2000) J. Comp. Biol. 7:761-776 VT160 matrix, "-s VT160", and OPTIMA_5 (Kann et al. (2000) Proteins 41:498-503).

June 7, 2007

ggssearch35(_t), glsearch35(_t) can now use PSSMs.

May 30, 2007 CVS fa35_01_04

Addition of ps_lav (now lav2ps or lav2svg) -- which can be used to plot the lav output of lalign35 -m 11.
lalign35 -m 11 | lav2ps
replaces plalign (from FASTA2).

May 2, 2007

The labels on the alignment scores are much more informative (and more diverse). In the past, alignment scores looked like:
>>gi|121716|sp|P10649|GSTM1_MOUSE Glutathione S-transfer  (218 aa)
 s-w opt: 1497  Z-score: 1857.5  bits: 350.8 E(): 8.3e-97
Smith-Waterman score: 1497; 100.0% identity (100.0% similar) in 218 aa overlap (1-218:1-218)
^^^^^^^^^^^^^^
where the highlighted text was either: "Smith-Waterman" or "banded Smith-Waterman". In fact, scores were calculated in other ways, including global/local for fasts and fastf. With the addition of ggsearch35, glsearch35, and lalign35, there are many more ways to calculate alignments: "Smith-Waterman" (ssearch and protein fasta), "banded Smith-Waterman" (DNA fasta), "Waterman-Eggert", "trans. Smith-Waterman", "global/local", "trans. global/local", "global/global (N-W)". The last option is a global global alignment, but with the affine gap penalties used in the Smith-Waterman algorithm.

April 19, 2007 CVS fa34t27br_lal_3

Two new programs, ggsearch35(_t) and glsearch35(_t) are now available. ggsearch35(_t) calculates an alignment score that is global in the query and global in the library; glsearch35(_t) calculates an alignment that is global in the query and local, while local in the library sequence. The latter program is designed for global alignments to domains. Both programs assume that scores are normally distributed. This appears to be an excellent approximation for ggsearch35 scores, but the distribution is somewhat skewed for global/local (glsearch) scores. ggsearch35(_t) only compares the query to library sequences that are beween 80% and 125% of the length of the query; glsearch limits comparisons to library sequences that are longer than 80% of the query. Initial results suggest that there is relatively little length dependence of scores over this range (scores go down dramatically outside these ranges).

March 29, 2007 CVS fa34t27br_lal_1

At last, the lalign (SIM) algorithm has been moved from FASTA21 to FASTA35. A plalign equivalent is also available using lalign -m 11 | lav2ps or | lav2svg. The statistical estimates for lalign35 should be much more accurate than those from the earlier lalign, because lambda and K are estimated from shuffles. In addition, all programs can now generate accurate statistical estimates with shuffles if the library has fewer than 500 sequences. If the library contains more than 500 sequences and the sequences are related, then the -z 11 option should be used. p
FASTA v34 Change Log

 

fasta36-36.3.8i_14-Nov-2020/doc/changes_v36.html000066400000000000000000000563351433453312700204420ustar00rootroot00000000000000 ChangeLog - FASTA v36

ChangeLog - FASTA v36


Updates - FASTA version 36.3.8i (Nov, 2022)

  1. Enable translation table -t 9 for Echinoderms. This bug has existed since alternate translation tables were first made available.
  2. Add an option, -Xg, that preserves the gi|12345 string the score summary and alignment output.
  3. Changes in scripts (get_protein.py, ann_pfam_www.pl, ann_pfam_www.py) to address changes in web addresses. Addition of ann_pfam_sql.py (python version of ann_pfam_sql.pl).

Updates - FASTA version 36.3.8i (Nov, 2020)

  1. fasta-36.3.8i (November, 2020) incorporates the SIMDe (SIMD-everywhere, https://github.com/simd-everywhere/simde/blob/master/simde/x86/sse2.h) macro definitions that allow the smith\_waterman\_sse2.c, global\_sse2.c, and glocal\_sse2.c code to be compiled on non-Intel architectures (currently tested on ARM/NEON). Many thanks to Michael R. Crusoe (https://orcid.org/0000-0002-2961-9670) for the SIMDE code converstion, and to Evan Nemerson for creating SIMDe.
  2. The code to read FASTA format sequence files now ignores lines with '#' at the beginning, for compatibility with PSI Extended FASTA Format (PEFF) files (http://www.psidev.info/peff).

Updates - FASTA version 36.3.8h (May, 2020)

  1. Correct bug where library sequence and residue count was not reset when large memory mapped databases that did not fit into memory were searched with multiple query sequences.
  2. Regularization of ***ERROR and ***Warning messages
  3. Changes to reduce compiler warnings
  4. The SSE2 implementations of the Smith-Waterman algorithm and a corresponding global alignment algorithm are now available under the BSD open source license.

Updates - FASTA version 36.3.8h (March, 2019)

  1. The FASTA programs have been released under the Apache2.0 Open Source License. The COPYRIGHT file, and copyright notices in program files, have been updated to reflect this change.
  2. FASTA can now use shell-scripts to produce both query and library sequence sets.
  3. [Feb, 2019] Scripts are available for extracting genomic DNA sequences using BEDTools. Combined with the ability to specify sequences using shell-scripts, this greatly simplifies the process of aligning a protein or DNA sequence to a region of a genome.
  4. preliminary code is available to read NCBI BLAST version 5 format libraries.
  5. fasta-36.3.8h includes bug fixes for translated alignments with termination codons, the ability to use scripts as query and library sequences, and new scripts for extracting genomic DNA sequences given chromosome coordinates.
  6. fasta-36.3.8g includes bug fixes for sub-alignment scoring and psisearch2 scripts, new annotation scripts for exons, and fixes enabling very low statistical thresholds with ggsearch36 and glsearch36.
  7. fasta-36.3.8e/scripts includes updated scripts for capturing domain and feature annotations using the EBI/proteins API (https://www.ebi.ac.uk/proteins/api/) to get Uniprot annotations and exon locations.
  8. The fasta-36.3.8e/psisearch2/ directory now provides psisearch2_msa.pl and psisearch2_msa.py, functionally identical scripts for iterative searching with psiblast or ssearch36. psisearch2-msa.pl offers an option, --query_seed, that can dramatically reduce false-positives caused by alignment overextension, with very little loss of search sensitivity.
  9. The fasta-36.3.8d/scripts/ directory now provides a script, annot_blast_btop2.pl that allows annotations and sub-alignment scoring on BLAST alignments that use the tabular format with BTOP alignment encoding.
  10. Alignment sub-scoring scripts have been extended to allow overlapping domains. This requires a modified annotation file format. The "classic" format placed the beginning and end of a domain on different lines:
       1   [    -     GST_N
       88   ]    -
       90   [    -     GST_C
      208   ]    - 
    
    Since the closing "]" was associated with the previous "[", domains could not overlap.

    The new format is:

       1   -    88     GST_N
       90   -   208    GST_C
    
    which allows annotations of the form:
        1   -    88    GST_N
       75   -   123    GST-middle
       90   -   208    GST_C
    
  11. New annotation scripts are available in the fasta-36.3.8/scripts directory, e.g. ann_pfam_www_e.pl (Pfam) and ann_up_www2_e.pl (Uniprot) to support this new format. If the domain annotations provided by Pfam or Uniprot overlap, then overlapping domains are provided. The _e.pl new scripts can be directed to provide non-overlapping domains, using the boundary averaging strategy in the older scripts, by specifying the --no-over option.

Updates - FASTA version 36.3.6f (August, 2014)

FASTA version 36.3.6f extends previous versions in several ways:

  1. There is a new command line option, -XI, that causes the alignment programs to report 100% identity only when there are no mismatches. In previous versions, one mismatch in 10,000 would round up to 100.0% identity; with -XI, the identity will be reported as 99.9%.
  2. The option to provide alignment encodings (-m 9c, or -m 9C forCIGAR strings) has been extended to provide mis-match information in the alignment encoding using the -m 9d (classic FASTA alignment encoding) or -m 9D (CIGAR string). For protein alignments, which are often < 40% identity, enabling mismatch encoding produces very long CIGAR strings.
  3. Provide more scripts for annotating proteins using either UniProt or Pfam web resources.

Additional bug fixes are documented in fasta-36.3.6f/doc/readme.v36

Updates - FASTA version 36.3.6 (July, 2013)

FASTA version 36.3.6 provides two new features:

  1. A new script-based strategy for including annotation information.
  2. Domain annotation information can be used to produce partition the alignment, and partition the scores of the alignment (sub-alignment scores). Sub-alignment scores can be used to identify regions of alignment over-extension, where a homologous domain aligns, but the alignment extends beyond the homologous region into an adjacent non-homologous domain.
Several scripts are provided (e.g. scripts/ann_feats_up_www.pl) that can be used to add Uniprot feature and domain annotations to searches of SwissProt and Uniprot.

(fasta-36.3.5 January 2013) The NCBI's transition from BLAST to BLAST+ several years ago broke the ability of ssearch36 to use PSSMs, because psiblast did not produce the binary ASN.1 PSSMs that ssearch36 could parse. With the January 2013 fasta-36.3.5f, release ssearch36 can read binary ASN.1 PSSM files produced by the NCBI datatool utility. See fasta_guide.pdf for more information (look for the -P option).


Summary - Major Changes in FASTA version 36.3.5 (May, 2011)

  1. By default, the FASTA36 programs are no longer interactive. Typing fasta36 presents a short help message, and fasta36 -help presents a complete list of options. To see the interactive prompts, use fasta36 -I.

    Likewise, the score histogram is no longer shown by default; use the -H option to show the histogram (or compile with -DSHOW_HIST for previous behavior).

    The _t (fasta36_t) versions of the programs are built automatically on Linux/MacOSX machines and named fasta36, etc. (the programs are threaded by default, and only one program version is built).

    Documentation has been significantly revised and updated. See doc/fasta_guide.pdf for a description of the programs and options.

  2. Display of all significant alignments between query and library sequence. BLAST has always displayed multiple high-scoring alignments (HSPs) between the query and library sequence; previous versions of the FASTA programs displayed only the best alignment, even when other high-scoring alignments were present. This is the major change in FASTA36. For most programs (fasta36, ssearch36, [t]fast[xy]36), if the library sequence contains additional significant alignments, they will be displayed with the alignment output, and as part of -m 9 output (the initial list of high scores).

    By default, the statistical threshold for alternate alignments (HSPs) is the E()-threshold / 10.0. For proteins, the default expect threshold is E() < 10.0, the secondary threshold for showing alternate alignments is thus E() < 1.0. Fror translated comparisons, the E()-thresholds are 5.0/0.5; for DNA:DNA 2.0/0.2.

    Both the primary and secondary E()-thresholds are set with the -E "prim sec" command line option. If the secondary value is betwee zero and 1.0, it is taken as the actual threshold. If it is > 1.0, it is taken as a divisor for the primary threshold. If it is negative, alternative alignments are disabled and only the best alignment is shown.

  3. New statistical options, -z 21, 22, 26, provide a second E()-value estimate based on shuffles of the highest scoring sequences.

  4. New output options. -m 8 provides the same output format as tabular BLAST; -m 8C mimics tabular blast with comment lines. -m 9C provides CIGAR encoded alignments.

    (fasta-36.3.4) Alignment option -m B provides BLAST-like alignments (no context, coordinates at the beginning and end of the alignment line, Query/Sbjct.

  5. Improved performance using statistics based thresholds for gap-joining and band-optimization in the heuristic FASTA local alignment programs (fasta36, [t]fast[xy]36). By default (fasta36.3) fasta36, [t]fast[xy]36 can use a similar strategy to BLAST to set the thresholds for combining ungapped regions and performing band alignments. This dramatically reduces the number of band alignments performed, for a speed increase of 2 - 3X. The original statistical thresholds can be enabled with the -c O (upper-case letter 'O') command line option. Protein and translated protein alignment programs can also use ktup=3 for increased speed, though ktup=2 is still the default.

    Statistical thresholds can dramatically reduce the number of "optimized" scores, from which statistical estimates are calculated. To address this problem, the statistical estimation procedure has been adjusted to correct for the fraction of scores that were optimized. This process can dramatically improve statistical accuracy for some matrices and gap pentalies, e.g. BLOSUM62 -11/-1.

    With the new joining thresholds, the -c "E-opt E-join" options have expanded meanings. -c "E-opt E-join" calculates a threshold designed (but not guaranteed) to do band optimization and joining for that fraction of sequences. Thus, -c "0.02 0.1" seeks to do band optimization (E-opt) on 2% of alignments, and joining on 10% of alignments. -c "40 10" sets the gap threshold as in earlier versions.

  6. A new option (-e expand_script.sh) is available that allows the set of sequences that are aligned to be larger than the set of sequences searched. When the -e expand_script.sh option is used, the expand_script.sh script is run with an input argument that is a file of accession numbers and E()-values; this information can be used to produce a fasta-formatted list of additional sequences, which will then be compared and aligned (if they are significant), and included in the list of high scoring sequences and the alignments. The expanded set of sequences does not change the database size o statisical parameters, it simply expands the set of high-scoring sequences.

  7. The -m F option can be used to produce multiple output formats in different files from the same search. For example, -m "F9c,10 m9c10.output" -m "FBB blastBB.output" produces two output files in addition to the normally formatted output sent to stdout. The m9c10.output file contains -m 9c score descriptions and -m 10 alignments, while blastBB.output contains BLAST-like output (-m BB).

  8. Scoring matrices can vary with query sequence length. In large-scale searches with metagenomics reads, some reads may be too short to produce statistically significant scores against comprehensive databases (e.g. a DNA read of 90 nt is translated into 30 aa, which would require a scoring matrix with at least 1.3 bits/position to produce a 40 bit score). fasta-36.3.* includes the option to specify a "variable" scoring matrix by including '?' as the first letter of the scoring matrix abbreviation, e.g. fasta36_t -q -s '?BP62' would use BP62 for sequences long enough to produce significant alignment scores, but would use scoring matrices with more information content for shorter sequences. The FASTA programs include BLOSUM50 (0.49 bits/pos) and BLOSUM62 (0.58 bits/pos) but can range to MD10 (3.44 bits/position). The variable scoring matrix option searches down the list of scoring matrices to find one with information content high enough to produce a 40 bit alignment score. (Several bugs in the process are fixed in fasta-36.3.2.)

  9. Several less-used options (-1, -B, -o, -x, -y) have become extended options, available via the -X (upper case X) option. The old -X off1,off2 option is now -o off1,off2.

    By default, the program will read up to 2 GB (32-bit systems) or 12 GB (64-bit systems) of the database into memory for multi-query searches. The amount of memory available for databases can be set with the -XM4G option.

  10. Much greater flexibility in specifying combinations of library files and subsets of libraries. It has always been possible to search a list of libraries specified by an indirect (@) file; the FASTA36 programs can include indirect files of library names inside of indirect files of library names.

  11. fasta-36.3.2 ggsearch36 (global/global) and glsearch36 now incorporate SSE2 accelerated global alignment, developed by Michael Farrar. These programs are now about 20-fold faster.

  12. fasta-36.2.1 (and later versions) are fully threaded, both for searches, and for alignments. The programs routinely run 12 - 15X faster on dual quad-core machines with "hyperthreading".

Summary - Major Changes in FASTA version 35 (August, 2007)

  1. Accurate shuffle based statistics for searches of small libraries (or pairwise comparisons).
  2. Inclusion of lalign35 (SIM) into FASTA3. Accurate statistics for lalign35 alignments. plalign has been replaced by lalign35 and lav2ps.
  3. Two new global alignment programs: ggsearch35 and glsearch35.

February 7, 2008

Allow annotations in library, as well as query sequences. Currently, annotations are only available within sequences (i.e., they are not read from the feature table), but they should be available in FASTA format, or any of the other ascii text formats (EMBL/Swissprot, Genbank, PIR/GCG). If annotations are present in a library and the annotation characters includes '*', then the -V '*' option MUST be used. However, special characters other than '*' are ignored, so annotations of '@', '%', or '@' should be transparent.

In translated sequence comparisons, annotations are only available for the protein sequence.

January 25, 2007

Support protein queries and sequence libraries that contain 'O' (pyrrolysine) and 'U' (selenocysteine). ('J' was supported already). Currently, 'O' is mapped automatically to 'K' and 'U' to 'C'.

Dec. 13, 2007 CVS fa35_03_02m

Add ability to search a subset of a library using a file name and a list of accession/gi numbers. This version introduces a new filetype, 10, which consists of a first line with a target filename, format, and accession number format-type, and optionally the accession number format in the database, followed by a list of accession numbers. For example:

	  </slib2/blast/swissprot.lseg 0:2 4|
	  3121763
	  51701705
	  7404340
	  74735515
	  ...
Tells the program that the target database is swissprot.lseg, which is in FASTA (library type 0) format.

The accession format comes after the ":". Currently, there are four accession formats, two that require ordered accessions (:1, :2), and two that hash the accessions (:3, :4) so they do not need to be ordered. The number and character after the accession format (e.g. "4|") indicate the offset of the beginning of the accession and the character that terminates the accession. Thus, in the typical NCBI Fasta definition line:

 >gi|1170095|sp|P46419|GSTM1_DERPT Glutathione S-transferase (GST class-mu)
The offset is 4 and the termination character is '|'. For databases distributed in FASTA format from the European Bioinformatics Institute, the offset depends on the name of the database, e.g.
 >SW:104K_THEAN Q4U9M9 104 kDa microneme/rhoptry antigen precursor (p104).
and the delimiter is ' ' (space, the default).

Accession formats 1 and 3 expect strings; accession formats 2 and 4 work with integers (e.g. gi numbers).

December 10, 2007

Provide encoded annotation information with -m 9c alignment summaries. The encoded alignment information makes it much simpler to highlight changes in critical residues.

August 22, 2007

A new program is available, lav2svg, which creates SVG (Scalable Vector Graphics) output. In addition, ps_lav, which was introduced May 30, 2007, has been replaced by lav2ps. SVG files are more easily edited with Adobe Illustrator than postscript (lav2ps) files.

July 25, 2007 CVS fa35_02_02

Change default gap penalties for OPTIMA5 matrix to -20/-2 from -24/-4.

July 23, 2007

Add code to support to support sub-sequence ranges for "library" sequences - necessary for fully functional prss (ssearch35) and lalign35. For all programs, it is now possible to specify a subset of both the query and the library, e.g.
lalign35 -q mchu.aa:1-74 mchu.aa:75-148
Note, however, that the subset range applied to the library will be applied to every sequence in the library - not just the first - and that the same subset range is applied to each sequence. This probably makes sense only if the library contains a single sequence (this is also true for the query sequence file).

July 3, 2007 CVS fa35_02_01

Merge of previous fasta34 with development version fasta35.

June 26, 2007

Add amino-acid 'J' for 'I' or 'L'.

Add Mueller and Vingron (2000) J. Comp. Biol. 7:761-776 VT160 matrix, "-s VT160", and OPTIMA_5 (Kann et al. (2000) Proteins 41:498-503).

June 7, 2007

ggssearch35(_t), glsearch35(_t) can now use PSSMs.

May 30, 2007 CVS fa35_01_04

Addition of ps_lav (now lav2ps or lav2svg) -- which can be used to plot the lav output of lalign35 -m 11.
lalign35 -m 11 | lav2ps
replaces plalign (from FASTA2).

May 2, 2007

The labels on the alignment scores are much more informative (and more diverse). In the past, alignment scores looked like:
>>gi|121716|sp|P10649|GSTM1_MOUSE Glutathione S-transfer  (218 aa)
 s-w opt: 1497  Z-score: 1857.5  bits: 350.8 E(): 8.3e-97
Smith-Waterman score: 1497; 100.0% identity (100.0% similar) in 218 aa overlap (1-218:1-218)
^^^^^^^^^^^^^^
where the highlighted text was either: "Smith-Waterman" or "banded Smith-Waterman". In fact, scores were calculated in other ways, including global/local for fasts and fastf. With the addition of ggsearch35, glsearch35, and lalign35, there are many more ways to calculate alignments: "Smith-Waterman" (ssearch and protein fasta), "banded Smith-Waterman" (DNA fasta), "Waterman-Eggert", "trans. Smith-Waterman", "global/local", "trans. global/local", "global/global (N-W)". The last option is a global global alignment, but with the affine gap penalties used in the Smith-Waterman algorithm.

April 19, 2007 CVS fa34t27br_lal_3

Two new programs, ggsearch35(_t) and glsearch35(_t) are now available. ggsearch35(_t) calculates an alignment score that is global in the query and global in the library; glsearch35(_t) calculates an alignment that is global in the query and local, while local in the library sequence. The latter program is designed for global alignments to domains. Both programs assume that scores are normally distributed. This appears to be an excellent approximation for ggsearch35 scores, but the distribution is somewhat skewed for global/local (glsearch) scores. ggsearch35(_t) only compares the query to library sequences that are beween 80% and 125% of the length of the query; glsearch limits comparisons to library sequences that are longer than 80% of the query. Initial results suggest that there is relatively little length dependence of scores over this range (scores go down dramatically outside these ranges).

March 29, 2007 CVS fa34t27br_lal_1

At last, the lalign (SIM) algorithm has been moved from FASTA21 to FASTA35. A plalign equivalent is also available using lalign -m 11 | lav2ps or | lav2svg. The statistical estimates for lalign35 should be much more accurate than those from the earlier lalign, because lambda and K are estimated from shuffles. In addition, all programs can now generate accurate statistical estimates with shuffles if the library has fewer than 500 sequences. If the library contains more than 500 sequences and the sequences are related, then the -z 11 option should be used. p
FASTA v34 Change Log

 

fasta36-36.3.8i_14-Nov-2020/doc/fasta.defaults000066400000000000000000000010611433453312700202570ustar00rootroot00000000000000#pgm mol matrix g_open g_ext fr_shft e_cut ktup # -n/-p -s -e -f -h/-j -E argv[3] fasta prot BL50 -10 -2 - 10.0 2 fasta dna +5/-4 -14 -4 - 2.0 6 ssearch prot bl50 -10 -2 - 10.0 - ssearch dna +5/-4 -14 -4 - 2.0 - fastx prot BL50 -12 -2 -20 5.0 2 fasty prot BL50 -12 -2 -20/-24 5.0 2 tfastx dna BL50 -14 -2 -20 5.0 2 tfasty dna BL50 -14 -2 -20/-24 5.0 2 fasts prot MD20-MS - - - 5.0 - tfasts prot MD10-MS - - - 2.0 - fastf prot MD20 - - - 5.0 - tfastf prot MD10 - - - 2.0 - fastm prot MD20 - - - 5.0 - tfastm prot MD10 - - - 2.0 - lalign prot BL50 -12 -2 10.0 - fasta36-36.3.8i_14-Nov-2020/doc/fasta.history.tex000066400000000000000000000214211433453312700207520ustar00rootroot00000000000000\begin{longtable}{p{0.75 in}p{5.25 in}} \multicolumn{2}{c}{\textbf{FASTA version history (cont.)}} \\ \hline\\[-1.0ex] % \textbf{Date} & {\bf Improvements} \\[0.5ex] \hline \\[-1.5ex] \endhead \multicolumn{2}{l}{{\Large {\bf FASTA version history}}} \\[2 ex] \hline\\[-1.0ex] % {\bf Date} & {\bf Improvements} \\[0.5ex] \hline \\[-1.5ex] \endfirsthead \hline\\ & \\ \endfoot \hline\\ & \\ \endlastfoot \multicolumn{2}{c}{ \FASTA v33, Oct, 1999 -- Dec, 2000 } \\[1 ex] \hline \\[-0.5 ex] Oct 1999 & Add support for NCBI Blast2.0 formatted libraries, and memory mapped databases. \FASTA now reads both \texttt{BLAST1.4} and \texttt{BLAST2.0} formatted databases. (version 3.2t08)\\ & Include Maximum Likelihood Estimates for Lambda and K ( -z 2) \\ & Include a new strategy for searching with low complexity regions. The \texttt{pseg} program can produce libraries with low complexity regions as lower case characters, which can be ignored during the initial \texttt{FASTA}/\texttt{SSEARCH} scan, but are considered when producing the final alignments. (3.3t01)\\ & Change output to report bit scores, which are also used by BLAST. \\ Mar 2000 & Another new statistics option, -z 6, uses Mott's approach \cite{mot921} for calculating a composition dependent Lambda for each sequence. (3.3t05) \\ Dec 2000 & Automatically change the gap penalties when alternate (known) scoring matrices are used using Reese and Pearson gap penalties \cite{wrp022}. First implementation to read from MySQL databases. \\ May 2001 & change all \FASTA gap penalties from first-residue, additional residue to the gap-open, gap-extend values used by BLAST. \\[0.5ex] \hline \\[-0.5 ex] \multicolumn{2}{c}{ \FASTA v34, Jan, 2001 -- Jan, 2007 } \\[1 ex] \hline \\[-0.5 ex] Jun 2002 & Modify statistical estimation strategy to sample all the sequences in the database, not just the first 60,000. (3.4t11) \\ Jan 2003 & Implementation of vector-accelerated (Altivec) code for Smith-Waterman ({\tt SSEARCH}) and banded Smith-Waterman (\FASTA) using the Rognes and Seebug \cite{rog003} algorithm. This code was removed in Sept, 2003, because of possible conflict with a patent application, but was restored using a different algorithm in Nov. 2004. \\ Jun 2003 & Provide \texttt{PSI-SEARCH} --- an implementation of \texttt{SSEARCH} that can search with \texttt{PSI-BLAST} PSSM profile files. \texttt{PSI-SEARCH} estimates statistical significance from the distribution of actual alignment scores; thus the estimates are much more reliable than \texttt{PSI-BLAST} estimates. Also, change the similarity display to work with profiles. (3.4t22) \\ July 2003 & Provide ASN.1 definition line parsing for \texttt{BLAST} {\tt formatdb} v.4 libraries. Restructure the programs to use a table-driven approach to parameter setting. Two tables now define the algorithm, query sequence type, library type, scoring matrix, and gap penalties for all programs. \\ Sept 2003 & A new option {\tt -V} for annotating alignments provided. Designed for highlighting post-translational modifications with {\tt fasts}, it can also be used to highlight active sites and other conserved residues. (3.4t23) \\ Dec 2003 & Addition of {\tt -U} option for RNA sequence comparison. {\tt G:A} matches score like {\tt G:G} matches to account for {\tt G:U} basepairs. Change default {\it ktup} for short query sequences. Increase band-width for DNA banded final alignments. \\ July 2004 & Allow searching of \texttt{Postgres}, as well as \texttt{MySQL} database queries. \\ Nov 2004 & (\texttt{fa34t24}) Incorporation of Erik Lindahl "anti-diagonal" Altivec implementation of \cite{woz974} for Smith-Waterman only. Altivec {\tt ssearch34} is now faster than {\tt fasta34} for query sequences $<$ 250 amino acids. \\ Jan 2005 & Change {\tt FASTS} to accommodate very large numbers of peptides ($>$100) for full coverage on long proteins \\ Jun. 2006 & (\texttt{fa34t26}) Incorporation of Smith-Waterman algorithm for the SSE2 vector instructions written by Michael Farrar \cite{farrar2007}. The SSE code speeds up Smith-Waterman 8 -- 16-fold. \\[1.0 ex] \hline \\[-0.5 ex] \multicolumn{2}{c}{ \FASTA v35, March, 2007 -- March, 2010 } \\[1 ex] \hline \\[-0.5 ex] Mar. 2007 & fasta v35 -- Accurate shuffle-based $E()$-values for all searches and alignments; statistics from searches against small libraries are supplemented with shuffled alignments.\\[1 ex] & More efficient threading strategies on multi-core computers, for 12X speedup on 16-core machines.\\[1 ex] & Inclusion of \texttt{lalign} (\texttt{SIM}) local domain alignments. \texttt{lalign} alignments now have accurate shuffle-based $E()$-values.\\[1 ex] Apr. 2007 & Introduction of \texttt{ggsearch}, for global alignment searches, and \texttt{glsearch}, for searches with scores that are global in the query and local in the library. \texttt{ggsearch} and \texttt{glsearch} calculate $E()$-values using the normal distribution. Both programs can search with \texttt{PSI-BLAST} PSSMs.\\[1 ex] Dec. 2007 & Efficient strategy for searching subsets of databases (lists of GI or accession numbers) \\[1 ex] Feb. 2008 & Annotations in either query or library sequences can be highlighted in the alignment, and the state of annotated residues is compactly summarized with \texttt{-m 9c}. \\[1 ex] Oct. 2008 & Modification \texttt{lsim4.c} (\texttt{lalign35}) provided by Xiaoqui Huang to ensure that self-alignments do not cross the identity diagonal. \\[1ex] %\pagebreak \hline \\[-0.5 ex] \multicolumn{2}{c}{ \FASTA v36, March, 2010 -- } \\[1 ex] \hline \\[-0.5 ex] Mar. 2010 & \FASTA v36 displays all significant alignments between query and library sequence. BLAST has always displayed multiple high-scoring alignments (HSPs) between the query and library sequence; previous versions of the FASTA programs displayed only the best alignment, even when other high-scoring alignments were present.\\[1 ex] & New statistical options, \texttt{-z 21, 22, 26}, provide a second $E2()$-value estimate based on shuffles of the highest scoring sequences. \\[1 ex] & Improved performance using statistics-based thresholds for gap-joining and band-optimization in the heuristic FASTA local alignment programs, increasing speed 2 - 3X. \\[1 ex] & Greater flexibility in specifying combinations of library files and subsets of libraries. \FASTA v36 programs can include indirect files of library names inside of indirect files of library names. \\[1 ex] & \FASTA36 programs are fully threaded, both for searches, and for alignments. The programs routinely run 12 - 15X faster on 8-core machines with "hyperthreading" (effectively 16 cores). \\[1 ex] & \texttt{-z 21} .. \texttt{26} E2() statistical estimates from shuffled best scores.\\[1.0ex] Sep. 2010 & \texttt{-m 8}, \texttt{-m 8C} BLAST tabular output. \\[1.0ex] Nov, 2010 & Variable scoring matrices (\texttt{-m ?BP62}).\\[1.0ex] Dec, 2010 & (\texttt{fasta-36.3.1}) SSE2 vectorized \texttt{ggsearch36}, \texttt{glsearch36} (Michael Farrar).\\[1.0ex] Jan, 2011 & (\texttt{fasta-36.3.2}) MPI versions implemented and tested.\\[1ex] Feb, 2011 & Introduce \texttt{-m B}, \texttt{-m BB} BLAST-like output.\\[1.0ex] Mar, 2011 & (\texttt{fasta-36.3.4}) Program is no longer interactive by default. \texttt{fasta36 -h} and \texttt{fasta36 -help} provide common/complete options, with many defaults. \texttt{doc/fasta\_guide.pdf} available.\\[1.0ex] May, 2011 & (\texttt{fasta-36.3.5}) Introduce (1) \texttt{-e expand.sh} scripts to extend the effective size of the database searched, based on significant hits; (2) \texttt{-m "F\# output.file"} to send different output formats to different files; and (3) \texttt{-X} expanded options, \texttt{-o} replaces the old \texttt{-X} and \texttt{-Xo} replaces \texttt{-o}. \\[1.0ex] Jan, 2012 & Include \texttt{.fastq} files as library type 7 \\[1.0ex] May, 2012 & allow reverse-complement alignments with \texttt{ggsearch} and \texttt{glsearch} \\[1.0ex] Jun, 2012 & Introduce \texttt{-V !script.pl} driven alignments, and variant scoring.\\[1.0ex] Aug, 2012 & Introduce \texttt{-V !ann\_feats.pl} sub-alignment (region-based) scoring.\\[1.0ex] Apr, 2013 & Extend \texttt{ENV} options to introduce a domain-plotting option for FASTA web sites.\\[1.0ex] Nov, 2014 & (\texttt{fasta-36.3.7}) Allow overlapping domains in annotation scripts.\\[1.0ex] Nov, 2015 & (\texttt{fasta-36.3.8}) Improvements in overlapping domain code. Introduction of \texttt{scripts/annot\_blast\_btop.pl} to provide annotations and subalignment scoring to \texttt{blast} alignments. Provide annotations in \texttt{-m 8CB} BLAST tabular output. \\[1.0ex] May, 2016 & Implement \texttt{psisearch2\_msa.pl} and \texttt{psisearch2\_msa.py}.\\[1.0ex] Feb, 2018 & Introduce \texttt{-X B}, which causes the \texttt{FASTA} programs ignore gaps to calculate \texttt{BLASTP} percent identities.\\[1.0ex] \hline \end{longtable} fasta36-36.3.8i_14-Nov-2020/doc/fasta.options000066400000000000000000000050251433453312700201470ustar00rootroot00000000000000## ## updated 13-Nov-2022 to correct extended options in initfa.c doinit.c case 'B': m_msg->z_bits = 0; case 'C': m_msg->nmlen case 'D': ppst->debug_lib = 1; case 'F': m_msg->e_low case 'H': m_msg->nohist = 0 case 'i': m_msg->revcomp = 1 case 'l': m_msg->flstr case 'L': m_msg->long_info = 1 case 'm': m_msg->markx case 'N': m_msg->maxn case 'O': m_msg->outfile case 'q': case 'Q': m_msg->quiet = 1; case 'R': m_msg->dfile case 'T': max_workers PCOMPLIB: worker_1,worker_n case 'v': ppst->zs_win case 'w': m_msg->aln.llen case 'W': m_msg->aln.llcntx case 'z': ppst->zsflag case 'v': ppst->zs_win case 'V': m_msg->ann_arr case 'Z': ppst->zdb_size initfa.c case '3': m_msg->nframe = 3; /* TFASTA */ m_msg->nframe = 1; /* for TFASTXY */ m_msg->qframe = 1; /* for FASTA, FASTX */ case 'a': m_msg->aln.showall = 1; case 'A': ppst->sw_flag= 1; case 'b': m_msg->mshow case 'c': ppst->param_u.fa.optcut case 'd': m_msg->ashow; case 'E': m_msg->e_cut, m_msg->e_cut_r case 'f': ppst->gdelval case 'g': ppst->ggapval case 'h': help /ppst->gshift (-USHOW_HELP) case 'I': m_msg->self = 1 case 'j': ppst->gshift, ppst->gsubs case 'k': m_msg->shuff_max case 'K': ppst->max_repeat case 'M': m_msg->n1_low,&m_msg->n1_high case 'n': m_msg->qdnaseq = SEQT_DNA (1) case 'p': m_msg->qdnaseq = SEQT_PROT (0); case 'r': ppst->p_d_mat,&ppst->p_d_mis case 's': standard_pam(smstr); ppst->pamoff=atoi(bp+1); case 'S': ppst->ext_sq_set = 1; /* treat upper/lower case residues differently */ case 't': ppst->tr_type case 'X': initfa.c/parse_ext_opts() /* extended options */ 'X1' : ppst->param_u.fa.initflag = 1 /* sort by init1 */ 'Xa' : m_msg->m8_show_annot = 1 'XB' : m_msp->blast_ident = 1 /* count identities like BLAST (gaps not in divisor) */ 'Xb' : m_msp->z_bits = 0 /* show z-scores, not bit-scores in best score list */ 'Xg' : m_msp->gi_save = 1 /* do not remove gi|12345 from output */ 'XI' : m_msp->tot_ident = 1 /* do not round 99.999% identity to 100% */ 'XM' : m_msp->max_memK = l_arg /* specify maximum amount of memory for library */ 'XN/XX' : ppst->pam_x_id_sim = 1/-1 /* modify treatment of N:N or X:X in identities */ 'Xo' : ppst->param_u.fa.optflag = 0 /* do not calculate opt score */ 'Xx' : ppst->pam_xx, ppst->pam_xm /* modify score for match to X */ 'Xy' : ppst->param_u.fa.optwid /* modify width of fasta optimization window for opt score */ fasta36-36.3.8i_14-Nov-2020/doc/fasta36.1000066400000000000000000000455451433453312700170000ustar00rootroot00000000000000.TH fasta36/ssearch36/[t]fast[x,y]36/lalign36 1 local .SH NAME fasta36 \- scan a protein or DNA sequence library for similar sequences fastx36 \ - compare a DNA sequence to a protein sequence database, comparing the translated DNA sequence in forward and reverse frames. tfastx36 \ - compare a protein sequence to a DNA sequence database, calculating similarities with frameshifts to the forward and reverse orientations. fasty36 \ - compare a DNA sequence to a protein sequence database, comparing the translated DNA sequence in forward and reverse frames. tfasty36 \ - compare a protein sequence to a DNA sequence database, calculating similarities with frameshifts to the forward and reverse orientations. fasts36 \- compare unordered peptides to a protein sequence database fastm36 \- compare ordered peptides (or short DNA sequences) to a protein (DNA) sequence database tfasts36 \- compare unordered peptides to a translated DNA sequence database fastf36 \- compare mixed peptides to a protein sequence database tfastf36 \- compare mixed peptides to a translated DNA sequence database ssearch36 \- compare a protein or DNA sequence to a sequence database using the Smith-Waterman algorithm. ggsearch36 \- compare a protein or DNA sequence to a sequence database using a global alignment (Needleman-Wunsch) glsearch36 \- compare a protein or DNA sequence to a sequence database with alignments that are global in the query and local in the database sequence (global-local). lalign36 \- produce multiple non-overlapping alignments for protein and DNA sequences using the Huang and Miller sim algorithm for the Waterman-Eggert algorithm. prss36, prfx36 \- discontinued; all the FASTA programs will estimate statistical significance using 500 shuffled sequence scores if two sequences are compared. .SH DESCRIPTION Release 3.6 of the FASTA package provides a modular set of sequence comparison programs that can run on conventional single processor computers or in parallel on multiprocessor computers. More than a dozen programs \- fasta36, fastx36/tfastx36, fasty36/tfasty36, fasts36/tfasts36, fastm36, fastf36/tfastf36, ssearch36, ggsearch36, and glsearch36 \- are currently available. All the comparison programs share a set of basic command line options; additional options are available for individual comparison functions. Threaded versions of the FASTA programs (built by default under Unix/Linux/MacOX) run in parallel on modern Linux and Unix multi-core or multi-processor computers. Accelerated versions of the Smith-Waterman algorithm are available for architectures with the Intel SSE2 or Altivec PowerPC architectures, which can speed-up Smith-Waterman calculations 10 - 20-fold. In addition to the serial and threaded versions of the FASTA programs, MPI parallel versions are available as \fCfasta36_mpi\fP, \fCssearch36_mpi\fP, \fCfastx36_mpi\fP, etc. The MPI parallel versions use the same command line options as the serial and threaded versions. .SH Running the FASTA programs .LP By default, the FASTA programs are no longer interactive; they are run from the command line by specifying the program, query.file, and library.file. Program options \fImust\fP preceed the query.file and library.file arguments: .sp .ti 0.5i \fCfasta36 -option1 -option2 -option3 query.file library.file > fasta.output\fP .sp The "classic" interactive mode, which prompts for a query.file and library.file, is available with the \fC-I\fP option. Typing a program name without any arguments (\fCssearch36\fP) provides a short help message; \fCprogram_name -help\fP provides a complete set of program options. .LP Program options \fIMUST\fP preceed the query.file and library.file arguments. .SH FASTA program options .LP The default scoring matrix and gap penalties used by each of the programs have been selected for high sensitivity searches with the various algorithms. The default program behavior can be modified by providing command line options \fIbefore\fP the query.file and library.file arguments. Command line options can also be used in interactive mode. Command line arguments come in several classes. (1) Commands that specify the comparison type. FASTA, FASTS, FASTM, SSEARCH, GGSEARCH, and GLSEARCH can compare either protein or DNA sequences, and attempt to recognize the comparison type by looking the residue composition. \fC-n\fP, \fC-p\fP specify DNA (nucleotide) or protein comparison, respectively. \fC-U\fP specifies RNA comparison. (2) Commands that limit the set of sequences compared: \fC-1\fP, \fC-3\fP, \fC-M\fP. (3) Commands that modify the scoring parameters: \fC-f gap-open penalty\P, \fC-g gap-extend penalty\fP, \fC-j inter-codon frame-shift, within-codon frameshift\fP, \fC-s scoring-matrix\fP, \fC-r match/mismatch score\fP, \fC-x X:X score\fP. (4) Commands that modify the algorithm (mostly FASTA and [T]FASTX/Y): \fC-c\fP, \fC-w\fP, \fC-y\fP, \fC-o\fP. The \fC-S\fP can be used to ignore lower-case (low complexity) residues during the initial score calculation. (5) Commands that modify the output: \fC-A\fP, \fC-b number\fP, \fC-C width\fP, \fC-d number\fP, \fC-L\fP, \fC-m 0-11,B\fP, \fC-w line-width\fP, \fC-W context-width\fP, \fC-o offset1,ofset2\fP (6) Commands that affect statistical estimates: \fC-Z\fP, \fC-k\fP. .SH Option summary: .TP \-1 Sort by "init1" score (obsolete) .TP \-3 ([t]fast[x,y] only) use only forward frame translations .TP \-a Displays the full length (included unaligned regions) of both sequences with fasta36, ssearch36, glsearch36, and fasts36. .TP \-A (fasta36 only) For DNA:DNA, force Smith-Waterman alignment for output. Smith-Waterman is the default for FASTA protein alignment and [t]fast[x,y], but not for DNA comparisons with FASTA. For protein:protein, use band-alignment algorithm. .TP \-b # number of best scores/descriptions to show (must be < expectation cutoff if -E is given). By default, this option is no longer used; all scores better than the expectation (E()) cutoff are listed. To guarantee the display of # descriptions/scores, use \fC-b =#\fP, i.e. \fC-b =100\fP ensures that 100 descriptions/scores will be displayed. To guarantee at least 1 description, but possibly many more (limited by \fC-E e_cut\fP), use \fC-b >1\fP. .TP \-c "E-opt E-join" threshold for gap joining (E-join) and band optimization (E-opt) in FASTA and [T]FASTX/Y. FASTA36 now uses BLAST-like statistical thresholds for joining and band optimization. The default statistical thresholds for protein and translated comparisons are E-opt=0.2, E-join=0.5; for DNA, E-join = 0.1 and E-opt= 0.02. The actual number of joins and optimizations is reported after the E-join and E-opt scoring parameters. Statistical thresholds improves search speed 2 - 3X, and provides much more accurate statistical estimates for matrices other than BLOSUM50. The "classic" joining/optimization thresholds that were the default in fasta35 and earlier programs are available using -c O (upper case O), possibly followed a value > 1.0 to set the optcut optimization threshold. .TP \-C # length of name abbreviation in alignments, default = 6. Must be less than 20. .TP \-d # number of best alignments to show ( must be < expectation (-E) cutoff and <= the -b description limit). .TP \-D turn on debugging mode. Enables checks on sequence alphabet that cause problems with tfastx36, tfasty36 (only available after compile time option). Also preserves temp files with -e expand_script.sh option. .TP \-e expand_script.sh Run a script to expand the set of sequences displayed/aligned based on the results of the initial search. When the -e expand_script.sh option is used, after the initial scan and statistics calculation, but before the "Best scores" are shown, expand_script.sh with a single argument, the name of a file that contains the accession information (the text on the fasta description line between > and the first space) and the E()-value for the sequence. expand_script.sh then uses this information to send a library of additional sequences to stdout. These additional sequences are included in the list of high-scoring sequences (if their scores are significant) and aligned. The additional sequences do not change the statistics or database size. .TP \-E e_cut e_cut_r expectation value upper limit for score and alignment display. Defaults are 10.0 for FASTA36 and SSEARCH36 protein searches, 5.0 for translated DNA/protein comparisons, and 2.0 for DNA/DNA searches. FASTA version 36 now reports additional alignments between the query and the library sequence, the second value sets the threshold for the subsequent alignments. If not given, the threshold is e_cut/10.0. If given and value > 1.0, e_cut_r = e_cut / value; for value < 1.0, e_cut_r = value; If e_cut_r < 0, then the additional alignment option is disabled. .TP \-f # penalty for opening a gap. .TP \-F # expectation value lower limit for score and alignment display. -F 1e-6 prevents library sequences with E()-values lower than 1e-6 from being displayed. This allows the use to focus on more distant relationships. .TP \-g # penalty for additional residues in a gap .TP \-h Show short help message. .TP \-help Show long help message, with all options. .TP \-H show histogram (with fasta-36.3.4, the histogram is not shown by default). .TP \-i (fasta DNA, [t]fastx[x,y]) compare against only the reverse complement of the library sequence. .TP \-I interactive mode; prompt for query filename, library. .TP \-j # # ([t]fast[x,y] only) penalty for a frameshift between two codons, ([t]fasty only) penalty for a frameshift within a codon. .TP \-J (lalign36 only) show identity alignment. .TP \-k specify number of shuffles for statistical parameter estimation (default=500). .TP \-l str specify FASTLIBS file .TP \-L report long sequence description in alignments (up to 200 characters). .TP \-m 0,1,2,3,4,5,6,8,9,10,11,B,BB,"F# out.file" alignment display options. \fC-m 0, 1, 2, 3\fP display different types of alignments. \fC-m 4\fP provides an alignment "map" on the query. \fC-m 5\fP combines the alignment map and a \fC-m 0\fP alignment. \fC-m 6\fP provides an HTML output. .TP \fC-m 8\fP seeks to mimic BLAST -m 8 tabular output. Only query and library sequence names, and identity, mismatch, starts/stops, E()-values, and bit scores are displayed. \fC-m 8C\fp mimics BLAST tabular format with comment lines. \fC-m 8\fP formats do not show alignments. .TP \fC-m 9\fP does not change the alignment output, but provides alignment coordinate and percent identity information with the best scores report. \fC-m 9c\fP adds encoded alignment information to the \fC-m 9\fP; \fC-m 9C\fP adds encoded alignment information as a CIGAR formatted string. To accomodate frameshifts, the CIGAR format has been supplemented with F (forward) and R (reverse). \fC-m 9i\fP provides only percent identity and alignment length information with the best scores. With current versions of the FASTA programs, independent \fC-m\fP options can be combined; e.g. \fC-m 1 -m 9c -m 6\fP. .TP \-m 11 provides \fClav\fP format output from lalign36. It does not currently affect other alignment algorithms. The \fClav2ps\fP and \fClav2svg\fP programs can be used to convert \fClav\fP format output to postscript/SVG alignment "dot-plots". .TP \-m B provides \fCBLAST\fP-like alignments. Alignments are labeled as "Query" and "Sbjct", with coordinates on the same line as the sequences, and \fCBLAST\fP-like symbols for matches and mismatches. \fC-m BB\fP extends BLAST similarity to all the output, providing an output that closely mimics BLAST output. .TP \-m "F# out.file" allows one search to write different alignment formats to different files. The 'F' indicates separate file output; the '#' is the output format (1-6,8,9,10,11,B,BB, multiple compatible formats can be combined separated by commas -','). .TP \-M #-# molecular weight (residue) cutoffs. -M "101-200" examines only library sequences that are 101-200 residues long. .TP \-n force query to nucleotide sequence .TP \-N # break long library sequences into blocks of # residues. Useful for bacterial genomes, which have only one sequence entry. -N 2000 works well for well for bacterial genomes. (This option was required when FASTA only provided one alignment between the query and library sequence. It is not as useful, now that multiple alignments are available.) .TP \-o "#,#" offsets query, library sequence for numbering alignments .TP \-O file send output to file. .TP \-p force query to protein alphabet. .TP \-P pssm_file (ssearch36, ggsearch36, glsearch36 only). Provide blastpgp checkpoint file as the PSSM for searching. Two PSSM file formats are available, which must be provided with the filename. 'pssm_file 0' uses a binary format that is machine specific; 'pssm_file 1' uses the "blastpgp -u 1 -C pssm_file" ASN.1 binary format (preferred). .TP \-q/-Q quiet option; do not prompt for input (on by default) .TP \-r "+n/-m" (DNA only) values for match/mismatch for DNA comparisons. \fC+n\fP is used for the maximum positive value and \fC-m\fP is used for the maximum negative value. Values between max and min, are rescaled, but residue pairs having the value -1 continue to be -1. .TP \-R file save all scores to statistics file (previously -r file) .TP \-s name specify substitution matrix. BLOSUM50 is used by default; PAM250, PAM120, and BLOSUM62 can be specified by setting -s P120, P250, or BL62. Additional scoring matrices include: BLOSUM80 (BL80), and MDM10, MDM20, MDM40 (Jones, Taylor, and Thornton, 1992 CABIOS 8:275-282; specified as -s MD10, -s MD20, -s MD40), OPTIMA5 (-s OPT5, Kann and Goldstein, (2002) Proteins 48:367-376), and VTML160 (-s VT160, Mueller and Vingron (2002) J. Comp. Biol. 19:8-13). Each scoring matrix has associated default gap penalties. The BLOSUM62 scoring matrix and -11/-1 gap penalties can be specified with -s BP62. .IP Alternatively, a BLASTP format scoring matrix file can be specified, e.g. -s matrix.filename. DNA scoring matrices can also be specified with the "-r" option. .IP With fasta36.3, variable scoring matrices can be specified by preceeding the scoring matrix abbreviation with '?', e.g. -s '?BP62'. Variable scoring matrices allow the FASTA programs to choose an alternative scoring matrix with higher information content (bit score/position) when short queries are used. For example, a 90 nucleotide FASTX query can produce only a 30 amino-acid alignment, so a scoring matrix with 1.33 bits/position is required to produce a 40 bit score. The FASTA programs include BLOSUM50 (0.49 bits/pos) and BLOSUM62 (0.58 bits/pos) but can range to MD10 (3.44 bits/position). The variable scoring matrix option searches down the list of scoring matrices to find one with information content high enough to produce a 40 bit alignment score. .TP \-S treat lower case letters in the query or database as low complexity regions that are equivalent to 'X' during the initial database scan, but are treated as normal residues for the final alignment display. Statistical estimates are based on the 'X'ed out sequence used during the initial search. Protein databases (and query sequences) can be generated in the appropriate format using John Wooton's "pseg" program, available from ftp://ftp.ncbi.nih.gov/pub/seg/pseg. Once you have compiled the "pseg" program, use the command: .IP \fCpseg database.fasta -z 1 -q > database.lc_seg\fP .TP \-t # Translation table - [t]fastx36 and [t]fasty36 support the BLAST tranlation tables. See \fChttp://www.ncbi.nih.gov/htbin-post/Taxonomy/wprintgc?mode=c/\fP. .TP \-T # (threaded, parallel only) number of threads or workers to use (on Linux/MacOS/Unix, the default is to use as many processors as are available; on Windows systems, 2 processors are used). .TP \-U Do RNA sequence comparisons: treat 'T' as 'U', allow G:U base pairs (by scoring "G-A" and "T-C" as score(G:G)-3). Search only one strand. .TP \-V "?$%*" Allow special annotation characters in query sequence. These characters will be displayed in the alignments on the coordinate number line. .TP \-w # line width for similarity score, sequence alignment, output. .TP \-W # context length (default is 1/2 of line width -w) for alignment, like fasta and ssearch, that provide additional sequence context. .TP \-X extended options. Less used options. Other options include \fC-XB\fP, \fC-XM4G\fP, \fC-Xo\fP, \fC-Xx\fP, and \fC-Xy\fP; see \fBfasta_guide.pdf\fP. .TP \-z 1, 2, 3, 4, 5, 6 Specify the statistical calculation. Default is -z 1 for local similarity searches, which uses regression against the length of the library sequence. -z -1 disables statistics. -z 0 estimates significance without normalizing for sequence length. -z 2 provides maximum likelihood estimates for lambda and K, censoring the 250 lowest and 250 highest scores. -z 3 uses Altschul and Gish's statistical estimates for specific protein BLOSUM scoring matrices and gap penalties. -z 4,5: an alternate regression method. \-z 6 uses a composition based maximum likelihood estimate based on the method of Mott (1992) Bull. Math. Biol. 54:59-75. .TP \-z 11,12,14,15,16 compute the regression against scores of randomly shuffled copies of the library sequences. Twice as many comparisons are performed, but accurate estimates can be generated from databases of related sequences. -z 11 uses the -z 1 regression strategy, etc. .TP \-z 21, 22, 24, 25, 26 compute two E()-values. The standard (library-based) E()-value is calculated in the standard way (-z 1, 2, etc), but a second E2() value is calculated by shuffling the high-scoring sequences (those with E()-values less than the threshold). For "average" composition proteins, these two estimates will be similar (though the best-shuffle estimates are always more conservative). For biased composition proteins, the two estimates may differ by 100-fold or more. A second -z option, e.g. -z "21 2", specifies the estimation method for the best-shuffle E2()-values. Best-shuffle E2()-values approximate the estimates given by PRSS (or in a pairwise SSEARCH). .TP \-Z db_size Set the apparent database size used for expectation value calculations (used for protein/protein FASTA and SSEARCH, and for [T]FASTX/Y). .SH Reading sequences from STDIN .LP The FASTA programs can accept a query sequence from the unix "stdin" data stream. This makes it much easier to use fasta36 and its relatives as part of a WWW page. To indicate that stdin is to be used, use "@" as the query sequence file name. "@" can also be used to specify a subset of the query sequence to be used, e.g: .sp .ti 0.5i cat query.aa | fasta36 @:50-150 s .sp would search the 's' database with residues 50-150 of query.aa. FASTA cannot automatically detect the sequence type (protein vs DNA) when "stdin" is used and assumes protein comparisons by default; the '-n' option is required for DNA for STDIN queries. .SH Environment variables: .TP FASTLIBS location of library choice file (-l FASTLIBS) .TP SRCH_URL1, SRCH_URL2 format strings used to define options to re-search the database. .TP REF_URL the format string used to define the option to lookup the library sequence in entrez, or some other database. .SH AUTHOR Bill Pearson .br wrp@virginia.EDU Version: $ Id: $ Revision: $Revision: 210 $ fasta36-36.3.8i_14-Nov-2020/doc/fasta_func.doc000066400000000000000000000226551433453312700202440ustar00rootroot00000000000000Over all structure of the fasta3 program. (Some functions are different for translated comparisons FASTX, FASTY, TFASTX, TFASTY.) main() { /* complib.c structure */ /* get command line arguments, set up initial parameter values */ initenv (argc, argv, &m_msg, &pst,&aa0[0],outtty); /* allocate space for sequence arrays */ /* get the query file name if not on command line */ /* get query */ m_msg.n0 = getseq (m_msg.tname,aa0[0], MAXTOT, m_msg.libstr,&pst.dnaseq, &m_msg.sq0off); /* reset some parameters if DNA */ resetp (aa0[0], m_msg.n0, &m_msg, &pst); /* get a library name if not on command line */ libchoice(m_msg.lname,sizeof(m_msg.lname),&m_msg); /* use library name to build list of library files */ libselect(m_msg.lname, &m_msg); /* get additional options (ktup, prss-window) if not specified */ query_parm (&m_msg, &pst); /* do final parameter initializations */ last_init(&m_msg, &pst); /* set up structures for saved scores[20000], statistics[50000] */ nbest = 0; /* initialize the comparison function */ init_work (aa0[0], m_msg.n0, &pst, &f_str[0]); /* open the library */ for (iln = 0; iln < m_msg.nln; iln++) { if (openlib(m_msg.lbnames[iln],m_msg)!=1) {continue;} } /* get the library sequence and do the comparison */ while ((n1=GETLIB(aa1ptr,maxt,libstr,&lmark,&lcont))>0) { do_work (aa0[itt], m_msg.n0, aa1, n1, itt, &pst, f_str[itt], &rst); /* save the scores */ /* save the scores for statistics */ } /* all done with all libraries */ process_hist(stats,nstats,pst); /* sort the scores by z-value */ sortbestz (bptr, nbest); /* sort the scores by E-value */ sortbeste (bptr, nbest); /* print the histogram */ prhist (stdout,m_msg,pst,gstring2); /* show the high scoring sequences */ showbest (stdout, aa0, aa1, maxn, bptr, nbest, qlib, &m_msg, pst, f_str, gstring2); /* show the high-scoring alignments */ showalign(outfd, aa0, aa1, maxn, bptr, nbest, qlib, m_msg, pst, f_str, gstring2); /* thats all folks !!! */ } ================ complib.c /* version set as mp_verstr */ main() printsum() /* prints summary of run (residues, entries, time) */ void fsigint() /* sets up interrupt handler for HUP not used */ ================ compacc.c void selectbest() /* select best 15000/20000 based on raw score */ void selectbestz() /* select best 15000/20000 based on z-score */ void sortbest() /* sort based on raw score */ void sortbestz() /* sort based on z-score */ void sortbeste() /* sort based on E() score - different from z-score for DNA */ prhist() /* print histogram */ shuffle() /* shuffle sequence (prss) */ wshuffle() /* window shuffle */ ================ showbest.c void showbest() /* present list of high scoring sequences */ ================ showalign.c void showalign() /* show list of high-scoring alignments */ void do_show() /* show an individual alignment */ void initseq() /* setup seqc0/seqc1 which contain alignment characters */ void freeseq() /* free them up */ ================ htime.c time_t s_time() /* get the time in usecs */ void ptime() /* print elapsed time */ ================ apam.c initpam () /* read in PAM matrix or change default array */ void mk_n_pam() /* make DNA pam from +5/-3 values */ ================ doinit.c void initenv() /* read environment variables, general options */ ================ initfa.c /* version set as "verstr" */ alloc_pam() /* allocate 2D pam array */ initpam2() /* fill it up from 1D pam triangle */ f_initenv() /* function-specific environment variables */ f_getopt() /* function-specific options */ f_getarg() /* function specific argument - ktup */ resetp() /* reset scoring matrix, optional parameters for DNA-DNA */ reseta() /* reset scoring matrix, optional parameters for prot-DNA */ query_parm() /* ask for additional program arguments (ktup) */ last_init() /* last chance to set up parameters based on query,lib,parms */ f_initpam() /* not used - could set parameters from pam matrix */ ================ scaleswn.c process_hist() /* do statistics calculations */ proc_hist_r() /* regression fit z=1, also used by z=5 */ float find_z() /* gives z-score for score, length, mu, rho, var */ float find_zr() /* gives z-score for score, length, mu, rho, var */ fit_llen() /* first estimate of mu, rho, var */ fit_llens() /* second estimate of mu, rho, var, mu2, rho2 */ proc_hist_r2() /* regression_i fit z=4 */ float find_zr2() /* gives z-score for score, length, mu, rho, mu2, rho2 */ fit_llen2() /* iterative estimate of mu, rho, var */ proc_hist_ln() /* ln()-scaled z=2 */ /* no longer used */ float find_zl() /* gives z-score from ln()-scaled scores */ proc_hist_ml() /* estimate lambda, K using Maximum Likelihood */ float find_ze() /* z-score from lambda, K */ proc_hist_n() /* no length-scaling z=0 */ float find_zn() /* gives z-score from mu, var (no scaling) */ proc_hist_a() /* Altschul-Gish params z= 3 */ ag_parm() /* match pst.pamfile name, look_p() */ look_p() /* lookup Lambda, K, H given param struct */ float find_za() eq_s() /* returns (double)score (available for length correction) */ ln_s() /* returns (double)score * ln(200)/ln(length) */ proc_hist_r() /* regression fit z=1, also used by z=5 */ alloc_hist() /* set up arrays for score vs length */ free_hist() /* free them */ inithist() /* calls alloc_hist(), sets some other globals */ addhist() /* update score vs length hist */ inithistz() /* initialize displayed (z-score) histogram hist[]*/ addhistz() /* add to hist[], increment num_db_entries */ addhistzp() /* add to hist[], don't change num_db_entries */ prune_hist() /* remove scores from score vs length */ update_db_size() /* num_db_entries = nlib - ntrimmed */ set_db_size() /* -Z db_size; set nlib */ double z_to_E() /* z-value to E() (extreme value distribution */ double zs_to_E() /* z-score (mu=50, sigma=10) to E() */ double zs_to_bit() /* z-score to BLAST2 bit score */ float E_to_zs() /* E() to z-score */ double zs_to_Ec() /* z-score to num_db_entries*(1 - P(zs)) summ_stats() /* put stat summary in string */ vsort() /* not used, does shell sort */ calc_ks() /* does Kolmogorov-Smirnoff calculation for histogram */ ================ dropnfa.c /* contains worker comparison functions */ init_work() /* set up struct f_struct fstr - hash query */ get_param() /* actually prints parameters to string */ close_work() /* clean up fstr */ do_work() /* do a comparison */ do_fasta() /* use the fasta() function */ savemax() /* save the best region during scan */ spam() /* rescan the best regions */ sconn() /* try to connect the best regions for initn */ kssort() /* sort by score */ kpsort() /* sort by left end pos */ shscore() /* best self-score */ dmatch() /* do band alignment for opt score */ FLOCAL_ALIGN() /* fast band score-only */ do_opt() /* do an "optimized comparison */ do_walign() /* put an alignment into res[] for calcons() */ sw_walign() /* SW alignment driver - find boundaries */ ALIGN() /* actual alignment driver */ nw_align() /* recursive global alignment */ CHECK_SCORE() /* double check */ DISPLAY() /* Miller's display routine */ bd_walign() /* band alignment driver for DNA */ LOCAL_ALIGN() /* find boundaries in band */ B_ALIGN() /* produce band alignment */ bg_align() /* recursively produce band alignment */ BCHECK_SCORE() /* double check */ calcons() /* calculate ascii alignment seqc0,seqc1 from res[]*/ calc_id() /* calculate % identity with no alignment */ ================ nxgetaa.c getseq() /* get a query (prot or DNA) */ getntseq() /* get a nt query (for fastx, fasty) */ gettitle() /* get a description */ int openlib() /* open a library */ closelib() /* close it */ GETLIB() /* get a fasta-format next library entry */ RANLIB() /* jump back in, get description, position for getlib() */ lgetlib() /* get a Genbank flat-file format next library entry */ lranlib() /* jump back in, get description, position for lgetlib() */ pgetlib() /* get CODATA format next library entry */ pranlib() /* jump back in, get description, position for lgetlib() */ egetlib() /* get EMBL format next library entry */ eranlib() /* jump back in, get description, position for egetlib() */ igetlib() /* get Intelligenetics format next library entry */ iranlib() /* jump back in, get description, position for igetlib() */ vgetlib() /* get PIR/VMS/GCG format next library entry */ vranlib() /* jump back in, get description, position for vgetlib() */ gcg_getlib() /* get GCG binary format next library entry */ gcg_ranlib() /* jump back in, get description, position for gcg_getlib() */ int scanseq() /* find %ACGT */ revcomp() /* do reverse complement */ sf_sort() /* sort superfamily numbers */ ================ c_dispn.c discons() /* display alignment from seqc0, seqc1 */ disgraph() /* display graphical representation, -m 4,5 */ aancpy() /* copy a binary sequence to ascii */ r_memcpy() l_memcpy() iidex() /* lookup ascii-encoding of residue */ cal_coord() /* calculate coordinates of alignment ends */ ================ ncbl_lib.c ncbl_openlib() ncbl_closelib() ncbl_getliba() ncbl_getlibn() ncbl_ranlib() src_ulong_read() src_long_read() src_char_read() src_fstr_read() newname() ================ lib_sel.c getlnames() libchoice() libselect() addfile() ulindex() ================ nrand48.c irand(time) /* initialize random number generator */ nrand(n) /* get a number 0 - n */ ================ url_subs.c void do_url1() /* setup search links */ fasta36-36.3.8i_14-Nov-2020/doc/fasta_guide.bib000066400000000000000000000157411433453312700203730ustar00rootroot00000000000000 @article( WRP881, author = {W. R. Pearson and D. J. Lipman}, title = {Improved tools for biological sequence comparison}, year = 1988, journal = {Proc. Natl. Acad. Sci. USA}, volume = 85, pages = {2444-2448}, annote = 88190088 ) @incollection( day787, author = {M. Dayhoff and R. M. Schwartz and B. C. Orcutt}, title = {A model of evolutionary change in proteins}, year = 1978, volume = {5, supplement 3}, booktitle = {Atlas of Protein Sequence and Structure}, editor = {M. Dayhoff}, publisher = {National Biomedical Research Foundation}, pages = {345-352}, address = {Silver Spring, MD} ) @article( WRP960, author = {W. R. Pearson}, title = {Effective protein sequence comparison}, year = 1996, journal = {Methods Enzymol.}, volume = 266, pages = {227-258}, annote = 97422296 ) @article( wrp971, author = {Z. Zhang and W. R. Pearson and W. Miller}, title = {Aligning a {DNA} sequence with a protein sequence}, year = 1997, journal = {J. Computational Biology}, volume = 4, pages = {339-349}, annote = 97422296 ) @article( wrp973, author = {W. R. Pearson and T. C. Wood and Z. Zhang and W. Miller}, title = {Comparison of {DNA} sequences with protein sequences}, year = 1997, journal = {Genomics}, volume = 46, pages = {24-36}, annote = 98066759 ) @article( wrp951, author = {W. R. Pearson}, title = { Comparison of methods for searching protein sequence databases}, year = 1995, journal = {Prot. Sci.}, volume = 4, pages = {1145-1160}, annote = 97422296 ) @article( wrp981, author = {W. R. Pearson}, title = { Empirical statistical estimates for sequence similarity searches}, year = 1998, journal = {J. Mol. Biol.}, volume = 276, pages = {71-84}, annote = 98179551 ) @article( tay925, author = {D. T. Jones and W. R. Taylor and J. M. Thornton}, title = { The rapid generation of mutation data matrices from protein sequences}, year = 1992, journal = {Comp. Appl. Biosci.}, volume = 8, pages = {275-282} ) @article( woo935, author = {J. C. Wootton and S. Federhen}, title = { Statistics of local complexity in amino acid sequences and sequence databases}, year = 1993, journal = {Comput. Chem.}, volume = 17, pages = {149-163} ) @article( alt960, author = {S. F. Altschul and W. Gish}, title = {Local alignment statistics}, year = 1996, journal = {Methods Enzymol.}, volume = 266, pages = {460-480} ) @article( alt915, author = {S. F. Altschul}, title = { Amino acid substitution matrices from an information theoretic perspective}, year = 1991, journal = {J. Mol. Biol.}, volume = 219, pages = {555-65} ) @article( WAT815, author = {T. F. Smith and M. S. Waterman}, title = {Identification of common molecular subsequences}, year = 1981, journal = {J. Mol. Biol.}, volume = 147, pages = {195-197}, annote = 81267385 ) @article( wrp021, author = {A. J. Mackey and T. A. J. Haystead and W. R. Pearson}, title = { Getting more From Less: Algorithms for Rapid Protein Identification with Multiple Short Peptide Sequences}, year = 2002, journal = {Mol. Cell. Proteomics}, volume = 1, pages = {139-147} ) @article( farrar2007, author = {M. Farrar}, title = { Striped {S}mith-{W}aterman speeds database searches six times over other SIMD implementations}, year = 2007, journal = {Bioinformatics}, volume = 23, pages = {156-161}, annote = 17110365 ) @article{kan023, author = {Maricel G Kann and Richard A Goldstein}, journal = {Proteins}, title = {Performance evaluation of a new algorithm for the detection of remote homologs with sequence comparison}, pages = {367--76}, volume = {48}, year = {2002}, month = {Aug}, pmid = {12112703} } @article{Muller2002, author = {Tobias Muller and Rainer Spang and Martin Vingron}, journal = {Mol Biol Evol}, title = {Estimating amino acid substitution models: a comparison of Dayhoff's estimator, the resolvent approach and a maximum likelihood method}, pages = {8--13}, volume = {19}, year = {2002}, date-added = {2011-03-14 22:15:08 -0400}, date-modified = {2011-03-14 22:15:08 -0400}, pmid = {11752185}, URL = {http://mbe.oxfordjournals.org/content/19/1/8.long} } @article( hen929, author = {S. Henikoff and J. G. Henikoff}, title = {Amino acid substitutions matrices from protein blocks}, year = 1992, journal = {Proc. Natl. Acad. Sci. USA}, volume = 89, pages = {10915-10919} ) @article( WAT875, author = {M. S. Waterman and M. Eggert}, title = { A new algorithm for best subsequences alignment with application to t{RNA}-r{RNA} comparisons}, year = 1987, journal = {J. Mol. Biol.}, volume = 197, pages = {723-728} ) @article( mil908, author = {X. Huang and R. C. Hardison and W. Miller}, title = {A space-efficient algorithm for local similarities}, year = 1990, journal = {Comp. Appl. Biosci.}, volume = 6, pages = {373-381} ) @article( uniprot11, author = {UniProt Consortium}, title = { Ongoing and future developments at the Universal Protein Resource.}, year = 2011, journal = {Nucleic Acids Res}, volume = 39, pages = {D214-D219}, annote = 21051339 ) @article( wrp022, author = {J. T. Reese and W. R. Pearson}, title = { Empirical determination of effective gap penalties for sequence comparison}, year = 2002, journal = {Bioinformatics}, volume = 18, pages = {1500-1507}, annote = 22310732 ) @article( rog003, author = {T. Rognes and E. Seeberg}, title = { Six-fold speed-up of Smith-Waterman sequence database searches using parallel processing on common microprocessors}, year = 2000, journal = {Bioinformatics}, volume = 16, pages = {699-706}, annote = 20551510 ) @article( mot921, author = {R. Mott}, title = { Maximum-likelihood estimation of the statistical distribution of Smith-Waterman local sequence similarity scores}, year = 1992, journal = {Bull. Math. Biol.}, volume = 54, pages = {59-75} ) @article( woz974, author = {A. Wozniak}, title = { Using video-oriented instructions to speed up sequence comparison}, year = 1997, journal = {Comput Appl Biosci}, volume = 13, pages = {145-150}, annote = 97292450 ) @article{wrp136, Author = {L. J. Mills and W. R. Pearson}, Journal = {Bioinformatics}, Pages = {3007-3013}, Title = {Adjusting scoring matrices to correct overextended alignments.}, Volume = 29, Year = 2013} @article( wrp103, author = {M. W. Gonzalez and W. R. Pearson}, title = { Homologous over-extension: a challenge for iterative similarity searches}, year = 2010, journal = {Nuc. Acids Res.}, volume = 38, pages = {2177-2189}, pmcid = {PMC2853128} ) @article{wrp171, author = {Pearson, W. R. and Li, W. and Lopez, R.}, title = {{Query-seeded iterative sequence similarity searching improves selectivity 5-20-fold.}}, journal = {Nucleic Acids Res}, year = {2017}, volume = {45}, number = {7}, pages = {e46--e46}, month = apr } fasta36-36.3.8i_14-Nov-2020/doc/fasta_guide.fg1.tex000066400000000000000000000070001433453312700211000ustar00rootroot00000000000000\begin{footnotesize} \begin{quote} \begin{verbatim} # ../bin/ssearch36 -q -w 80 ../seq/mgstm1.aa a SSEARCH performs a Smith-Waterman search version 36.3.6 June, 2013(preload9) 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: ../seq/mgstm1.aa 1>>>mGSTM1 mouse glutathione transferase M1 - 218 aa Library: PIR1 Annotated (rel. 66) 5121825 residues in 13143 sequences Statistics: Expectation_n fit: rho(ln(x))= 7.4729+/-0.000484; mu= 2.0282+/- 0.027 mean_var=56.9651+/-10.957, 0's: 9 Z-trim(119.4): 17 B-trim: 67 in 1/62 Lambda= 0.169930 statistics sampled from 13135 (13143) to 13135 sequences Algorithm: Smith-Waterman (SSE2, Michael Farrar 2006) (7.2 Nov 2010) Parameters: BL50 matrix (15:-5), open/ext: -10/-2 Scan time: 3.820 The best scores are: s-w bits E(13143) sp|P08010|GSTM2_RAT Glutathione S-transferase Mu 2; GST 4-4; GT ( 218) 1248 312.0 7.7e-86 sp|P04906|GSTP1_RAT Glutathione S-transferase P; Chain 7; GST - ( 210) 344 90.4 3.8e-19 sp|P00502|GSTA1_RAT Glutathione S-transferase alpha-1; GST 1-1 ( 222) 237 64.1 3.2e-11 sp|P14942|GSTA4_RAT Glutathione S-transferase alpha-4; GST 8-8 ( 222) 179 49.9 6.1e-07 sp|P12653|GSTF1_MAIZE Glutathione S-transferase 1; GST class-pi ( 214) 120 35.4 0.013 sp|P04907|GSTF3_MAIZE Glutathione S-transferase 3; GST class-pi ( 222) 115 34.2 0.032 sp|P20432|GSTT1_DROME Glutathione S-transferase 1-1; DDT-dehydr ( 209) 100 30.5 0.38 sp|P11277|SPTB1_HUMAN Spectrin beta chain, erythrocytic; Beta- (2137) 108 31.6 1.9 ... (alignments deleted) ... >>sp|P14942|GSTA4_RAT Glutathione S-transferase alpha-4; GST 8-8; (222 aa) s-w opt: 179 Z-score: 231.0 bits: 49.9 E(13143): 6.1e-07 Smith-Waterman score: 179; 25.6% identity (54.5% similar) in 211 aa overlap (5-207:7-207) 10 20 30 40 50 60 70 mGSTM MPMILGYWNVRGLTHPIRMLLEYTDSSYDEKRYTMGDAPDFDRSQWLNEKF-KLG-LDFPNLPYL-IDGSHKITQSNA : :.. :: . :: :: . ..: .: ... ::. : : : : ..: . ::: .::. : sp|P14 MEVKPKLYYFQGRGRMESIRWLLATAGVEFEE---------EFLETREQYEKLQKDGCLLFGQVPLVEIDG-MLLTQTRA 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 mGSTM ILRYLARKHHLDGETEEERIRADIVENQVMDTRMQLIMLCYNPDFEKQKPEFLKTIPEKMKLYSEF--LGK---RPWFAG :: ::: :..: :. .::.: :. . ..: :..: .. ::.. : . : . . : . : . ...: sp|P14 ILSYLAAKYNLYGKDLKERVRIDMYADGTQDLMMMIIGAPFKAPQEKEESLALAVKRAKNRYFPVFEKILKDHGEAFLVG 80 90 100 110 120 130 140 150 160 170 180 190 200 210 mGSTM DKVTYVDFLAYDILDQYRMFEPKCLDAFPNLRDFLARFEGLKKISAYMKSSRYIATPIFSKMAHWSNK ......:. . . . . :. :: :. : .:. .. :. ... . : sp|P14 NQLSWADIQLLEAILMVEEVSAPVLSDFPLLQAFKTRISNIPTIKKFLQPGSQRKPPPDGHYVDVVRTVLKF 160 170 180 190 200 210 220 ... (alignments deleted) ... 218 residues in 1 query sequences 5121825 residues in 13143 library sequences Tcomplib [36.3.6 May, 2013(preload9)] (4 proc in memory [0G]) start: Thu Jun 6 11:23:28 2013 done: Thu Jun 6 11:23:30 2013 Total Scan time: 3.820 Total Display time: 0.130 Function used was SSEARCH [36.3.6 May, 2013(preload9)] \end{verbatim} \end{quote} \end{footnotesize} \vspace{-4.0ex} fasta36-36.3.8i_14-Nov-2020/doc/fasta_guide.fg2.tex000066400000000000000000000030031433453312700211000ustar00rootroot00000000000000\begin{footnotesize} \begin{verbatim} >>GST26_SCHMA Glutathione S-transferase class-mu (218 aa) initn: 422 init1: 359 opt: 407 Z-score: 836.8 bits: 162.0 E(437847): 3.7e-39 Smith-Waterman score: 451; 42.4% identity (73.4% similar) in 203 aa overlap (6-208:6-203) 10 20 30 40 50 60 70 80 mGSTM1 MPMILGYWNVRGLTHPIRMLLEYTDSSYDEKRYTMGDAPDFDRSQWLNEKFKLGLDFPNLPYLIDGSHKITQSNAILRYL :::.:.::..: :.:::. ...:.:. : : ..: : :.::::::.:::::: :::. :.::: ::.::. GST26_ MAPKFGYWKVKGLVQPTRlllehleetyeeRAY---DRNEIDA--WSNDKFKLGLEFPNLPYYIDGDFKLTQSMAIIRYI 10 20 30 40 50 60 70 90 100 110 120 130 140 150 160 mGSTM1 ARKHHLDGETEEERIRADIVENQVMDTRMQLIMLCYNPDFEKQKPEFLKTIPEKMKLYSEFLGKRPWFAGDKVTYVDFLA : ::.. : .:: . ...:. :.: :: .. ..:: ..: : .::. .: ..:.... :... .. :. ::. ::. GST26_ ADKHNMLGACPKERAEISMLEGAVLDIRMGVLRIAYNKEYETLKVDFLNKLPGRLKMFEDRLSNKTYLNGNCVTHPDFML 80 90 100 110 120 130 140 150 170 180 190 200 210 mGSTM1 YDILDQYRMFEPKCLDAFPNLRDFLARFEGLKKISAYMKSSRYIATPIFSKMAHWSNK :: :: .. .::. ::.: .: .: : .:. :..::::: :. GST26_ YDALDVVLYMDSQCLNEFPKLVSFKKCIEDLPQIKNYLNSSRYIKWPLQGWDATFGGGDTPPK 160 170 180 190 200 210 \end{verbatim} \end{footnotesize} fasta36-36.3.8i_14-Nov-2020/doc/fasta_guide.pdf000066400000000000000000010562251433453312700204130ustar00rootroot00000000000000%PDF-1.5 %ÐÔÅØ 3 0 obj << /Length 3014 /Filter /FlateDecode >> stream xÚ­YKsÛ8¾ûWèHU…_Ù“½I¶’J²ÉØ»sHr IHb ’Š£ùõÛnð!ÑÎlÕ”«L ñê>t ÝÜ]ýòF†›À÷R? 6w»Mxqšlb%½0U›»bóÅÙm¥ïdý¹2ò¤—”[W$a$œí6ï[:º¾×ÈãÄ ä *_ˆí·»wW¯ï®þ¸ 6>üã 2õ¤ÜäõÕ—oþ¦€¦wß“Ðòh:ÖE^†P®6·WŸ¯nŒ¶Ñ&PžT‘˜k뇞Òöî iù7ÛÄw®oï¶)|HôÐm…ï´û.«Yå(ù=Û¾³ßºð_£Ê°¨+¥§|Þ‚·Í@C‹c>”mƒ}η†ˆÔó…U£ìqÈ)ÚüXëfÈÌ@é>‡Ý‚Í+ï5wHïˆ÷³ëÇÞ2¢o»;ë9Z61Û=Óá?23šÌÜóȯ~è÷š+¿á4•åï§m[‘u=ÙŠÆ •’uYS@?‘:¯¶1ˆ¼Cœx$_>ÔYCr\,H“¾BC¦ÎW!äÛtÄ’1m[õ4Ø€¯í¨ñ¦l«v_æYE·ú£nrM­×MVú²‡É¯óéãõ-uM—B)å¿äÅܤ,ú¤ß¶®Lâq;dBÛ²ùvÙ”FhKÀ¤×;£®ŒQ4 Ø9è’Gö£ÎXËÛú!c(Àä¨:ù ‡,ÅóºùóT·•©ùŽˆ¢—BÄîÚ±À%€Ñ~ ÖDßþE!è¨P¶´z€)•„.ت˜­‚>ÿÒM[—yO5K+ñhþ7ø_Ü3‹Yl“ôAÈâ×@VúÉd±q†Î~ͪ¼…ËS6¨ƒò„ìÖ‰jgpÇ>pì#h°K6燲ÙSõÕÇk*ÐÆÐ|±È€Ü ¨Ó“$ƒ%ñdsuIhÀ£û¶Ö$y³U¡Óä L”]÷¿ã. AçÏGݰP+®L‡óîQ Öðíz4)Š’ƒ#ª° œ–‹DÑ\‹äÀA×)‹ ˆÂr…¥¼0†Èu²†½Ê’…ˆ0ön ñb%žã!@€u,YÈbIÐÏ aæ •¤•¿W: uµÆ\Ö`ÔñÅš!”ŸZ!CéùIð·X!ÃȃyέŸ¶"ñ"8AæŠ"Fôóã@®—Æâo1DÅ>· CÔ_4ýsÅÈU*f™.˜BœbóØ˜ ‡tDÁhžiÄ›d¾x½±õâzÓÅUd8ëÚæ‰Ä i5ëtVÔÚû.}þEk¦¤¸W¦=f€ôÉH^·¦r‘Jìr%n_ –7µ£ÈWZrš8pC‡v (!ššXšš¬Î)BÙäÕ± WÕ{ô*G® ö? z*ÞÅ3Æ/£h-˜€4ëL3ð¬?‘ˆ¼\.£nF¹#ÉɰüãbddCNVÕ$$Gá>â§ÎdhÛ 2 g Ji)ê²íÒ9Έì=]†8F:á¶a–®«^;OŠb[žqª@1£ŠŒ³ï÷Ïjav©‰_!X„UªÚüg˦bò8×¾úÿÖ¥¹WÐRŒ1&D™òÚq“›žˆôzœ•/§Öì'ÑÙž^ºW4tñðKüæpX%äÀ#ü‰Ä<ôå}•ƒZ'bÉx@Ÿno?ŒžÞ2™‘¸Ax*…šñû_=0@Ákp^ÝWfF]gø'Ì(¦I/4F<ƒî´þ±~lÊ÷°ô<¡Oâd>Õ险~:ÓØcxN«³4ä©Oñôf•iV`ËÓ¬àïG:»ºc¸h·?¥ ÄDZ†!$ÉylbèÏÙ@x9ÍÐs7ƒuä‡ã𑞔”‹RmŸ=¸ùPjK4•ïÏ›¦Ð 7¾÷y¡pyÌËiÈT| PÄö,ÎwRù˜?ºrñ)¢ A?X… Ü‚$0[às©ki~“IùbR+ó« ÷ÕÇk£/^^T»o†l4/zfår™ÙAøÏ=áÃ[{*e }uýPr85®]áK)ìgÍï÷Øga"2 D™L¬Z‘ÓØK•åÓ Jî[ð•ff ´}³IV´?”ûƒ‹’n–o„öŒpŽ&¨«.Ná2Îý0 ÁÚŇd4š¼!ñ €óÄ—xWŒ÷”^Æ©c´ÄsþQŽåUyO»9¥ÄÚb¤Ög»©Š‰ÅaŸ‹ãÙeÜD©‰bX >9ø ?þóæí/ëL—b×v Yqÿ¤'NfžX¦–ÇÁ*‹4 €òDÁœÇbu;̬ÊÎ*˜#ÃТì Y1´j0Íô` õ§ÛÏïiĨù¥ í&¬ý 7°döü1sŒ»Ÿ$j“¦|jeÊãU+ír“ùØáAç‡Lâxßë¡_¾Eœ)ø¤—µ×ô*pæpQ¤wæ¿4¯ê(ˆ"ãü€]•ø„2þÚgžw$Cú^@tíYÈÌ“u<„ÉÅJ$‘‚µD¸VÑx™@…ÊúGS¦ÃÆÂ<2†Šq†ÃYâ&j÷2UéŠ$-·Ô(?BvssûQvȺâw-ã'ëX:ÿ^°—Œiûˆõ•ÝXý”ÕOÆ_¯Í1‚²È†Zl ÂÇD—²ÒTƒ#)Ž9=ù„Èu‡qôl·Vô6˜ŒÞX:‹Ðsïl1Îáå§èŒ&tâ»Òó~8!iÖ4­ý­YFÖþ¼¬œýF€&~5[É~£Õì7²i7¾h59¿ù=´“mØ2ÅÉûÒ¶ ^î“x%ÇÃõ%iÊY cÙôã.ôr=жÎÊfŒ€©ñîxV,ZÆNfñI“Ù®õ$àßåRŒD«¿µN¿<«EÃôœÐÝÚŸúæqærööDŽMæÉ ¾¿]U­yz oŒPöWxÉö“>¦è@ÏTÈÉ$(ý§)‘QÑïà—@Í&Öx~j°oôÿÁ Äœ endstream endobj 12 0 obj << /Length 2681 /Filter /FlateDecode >> stream xÚ¥YYoÛH~÷¯ÐË4uúä‘Á>8׬3‰wíìK,(‘’ˆP¤"Rvüï·ª«yI-Ç›E€¨ÙlÖ}|Õ~}wñò½23ÁYÂ1»[Í"Á¢$žEZ1“èÙ]6û¬.Ò¦Mç*dŠÅÅå\Æ&”Á‡úR˜àþRš ß.ò=ìGq Ô ZH.åå×»?.ÞÝ]|¿3ÿDÏA%L©Ùr{ñù+Ÿeðêg Þ<؃ۙCërv{ñϋקÒ& ãä†I“´i•{)‚¬Þ¦E…k•U¢FM°MÛ¢®èÔj_oéÌ é¹¥ýžÌ›«KoïþÁèØÛž¬8K–ËÔYäô{hòŒ^µ5í4‡Å<+î‹,G#šsF׉S£,ÖÕ6¯Z²e³¬÷yCkK~óª9ìs··IÛnå¶,ËzcÀºpt6õ¶.ëu}hÐÌJ1ë*ÎæR³8tp ªDi–¨"øWKIœT¢ƒ÷—1®nﬡ®èìn_¯/öø_ºmh×Zø€#ÕØ‘"‘L‚ (Þ†XÓîð4Fã"êN×UÏÐF#ÚÓJ•ºõŽÜ‚k4;œ–î 0ø\ùHV±dÂhr‰!F¯ÿ´*jÌËâÛ%¨ê ]ÚÝÁYÿ 7ܧ è+ÓÉ<‡ 3ÀôõkŸ~2f!¸ÀŠÂ%TS;;­Òò±éº+vyYT]œìó mQÛ´tuV|á\.mÄ2'D8š)Jb.¤`’k®9$É".!>8øØERV¸GÓ“ï‹ðà^­†p$òñ˜¼0`X®:%߃i¯|bó8Iºc»=2¬×{ (åæ"ÑLs „Ê é£«²ÝÔ‡õ‚Vh”M‚Ë´_ÐO™î×n§Â¨=PMÃgÔF _Tã[L,¢]¸]ºDI¿¥kkLM¶cöÌ"/ëjí¾¬; û܉@|êîyå«hcÂ6å‰EIоÆ7M±-@3p‘ Šö7eЀX ÿrS ¸s¬Ù+_K)Y"ÂI¢ªÐç ð®ÜÁ>bÑ4ãëò§t{+ýt•¶a-)¬¥ÁÍI¾áîÐt†rÇøøP´÷bƒG \·î+"²Æ¦z&¼UÌ OÇÑÔüjTÎu2!̤… ÅÕ/ǧa‘žFUóËQuJkõ=”!KT*í“x„¤#ieýnA‰}C ƒ-¢¼‹b$^Ò ²6ˆA–å!Ë3æML­¡õ>ئ»Ó¹LA×—Î çÌÄâ©É p¹Å§ã¹lšø%ÒÒR@Ër;èë¨!; § MK¸²ˆÝê—Yƒü 뜌päh£Í&ïò;‰¡Ëiˆ}?ä•ä8øáQ Ôðݶ޻SùÊçÂNf¸ÑÀ¨WAqñ^q°ÕxË=Só²Lïå®lÙ®ôš„ÃàËûì(‰œveÝ’l¨žp !‰âÞË ¸xkT.i†ñ‚Ë’t¶ pÞ%$bðhj-™Ð-`ßYÌÌ£ia¤i§›z„ðNu0F}LⳫ¡Ë yH›ç†¬@¬Ö½‘‰ý<Ëïi¹küv¡RGãÁ‹øQ˜àöß—P‘ZÃÇ0ò !šûµW ˜~FèÍJA.Èq ÍžÞ ŽOF7éF·O 5Âq ë“)±¹„[7ö.Ä 1XhÖvÆËF‚%XRˆŒ[Z8‘`rv¼®«–6¬v/?žÌŠp{ù ¡¹ñ ›u9qaqœû¸×ä]*Ë0–õv×<-Ýpä´nâ.TG¡›“ðlép¤&ºö*&§ª¡çþLŽ‹†ò4¯ÝYéM‚|vpØ×C>b¯#X ôì)ÛpƒÎ6ëkS–ï1<^A@*ÝÙ‡UºuÇm·BrôLÔÝr(ƒÑ,m¬]çU÷UY,Èdã’“itümÒY&¡4$n êÄá%zTÄ¢i&̈¾|k;oÓL …½m½š· ¢á$*¸^¯ÁÌ ’33lÓÕPCddx?ºIÊœ:ýäîX†Ðà‡ÊµµWg`XÄ"©(”C=Í»‚ ã“q¡OP@ƒU–îîÜ8wvwwAîý±Ã¦§¦‘JXis83Ñè7¹ ì†~*g»Èº %­P¸G¶BÌhŸQ˜´Ûñ]Ùøx<6éã.“sz {ÄC¶7´áç:aaÜûe$˜G hz©nˆ´,ëÆ1õs¢œ ÈúgÚF”ìïO®Çñ¹Ž®#È…>`^ÿùñöÓ_¡ôN1Ôãhõ¾ëäZ‚jGк\üANuXÙûΙ1ÜÍ«´l‹;Ÿk‚"N˜@Æ\ˆ—so×WЯB5nv¬ÇB1…ÏwgP7mÒ»½ùînJî<éxpïx¡&øˆ“¡7ú}WáÓè¿~~Do ;ÊhìCyãJ»îºÌÔ_¤TË2…J¹„¥¦·EÕ:ðߺ¡…ö·uæVèºwD"˜Õé”t£ ýiãP¶´±È7©½º-hŠÆ‡w4nîhpðñÅ% ”¡ìÃíü]ýYÿj“0€I“¨¼¶þá#­—#µ#Ajw£©"¸8ÐG®fDîO.°A²Ý¹iqti?Ø1ÉîPñ¼+·¢k °Eãžè^Áêܰ5@×?#ázào4Vï±NH{èÉ\yÒu]¾õ<âÉ fî&Ç9’F¦é¢¢ûS’í¨võ÷ÉX\»O¥ë 6·Ç ,CZ¹ŸaàOã=ª ï§aÅŒVé7‡ýÞÎQšËqÄ5´c/ݹ3>n?ÜóÜÈÃ.Š»|鈧Di €p»kŒö¶O\œX°¬½ÁW*(Vt¦7/RµˆÎQ„râz¯0$ƒé`ä¸÷2‰…J=÷V½O&¨/|Þv‰€žÈ'W“Qü`^ºHØæM“®sW ŸA7 ±v­¬"ÛTµD뿹 f|½k#z¤ë§Û«ßßÙšEüÈ×–Ðç¹Cb_G â?' b´ó£øë„oì%='%q¹Bíq‘Òb‹#=u&$~„ß L‘ì¦á¼}wûæ_×7w×?x1Ç1MΓ³°bú¿ƒÿÞÞä† endstream endobj 17 0 obj << /Length 2529 /Filter /FlateDecode >> stream xÚÅY[oÛÆ~÷¯Ð£T ÷Â%Ù¢I›â 8 p`-àø)‰(E*"•Äýõg.»¼H¤,§@ ærw¸—™o¾™Y½{¸{ó‹ fÂ÷b?³‡Í,^G³P+/ˆõì!=Î7 åÏ“ºI–ÊxÊ‹òÅRF‘óÕBóÏ ̳ý*;BÍ…úŽÒ—rñôðëÝû‡»OwbæÃŸhWP±§Ôl½¿{|òg) ý:ó=#_Hp?ÓÆx& ]Ìîïþw÷îr·ÂÄž–ñÌÄ‘'…ÝîÃBHØïjÿ‹ÌîéûÅRi=ÿ©ÚØ'l;¯«’Çj»þüˆÿ’}ͽ¹mvvŽ_‘?{ÏÓ¿UÆ~œ¬q¡?“m6yVÃSÅ×z‘ ¯6 ½043j8«à³÷„€–Œ§c–8;‰€ÖPl_ìÝq–‘ï³O§ü3®âÑhx"0ƒOÎêµUé¡ÉA©“j ùÕjPcjP‘…V D'[ÄóU¯ÜÆ^|åÅ"‚éé³7Vf0?àÄSF±¤˱{ú°² 1ÀŒŠÍ<ÁG€Fh2öÕ Ò¬\[‰¦ºU2Mšd•Ô VG÷]Ïhv ?x ªˆuo+Z {~•Ò½ePèTçå–Ø ï tKŽëׇ,K± G+SÛ—ÙºÉ?çͳ!ýÂȺ*›cUî“/°ànÙ^aß^g»û³9EBS*‡“~àAÿ©Žiÿ…¤—AŸ€•¤š#¡oeM¶pàe©‰2”Ï–B¹Ö´RÂÆDTãœßmXªðº­LnX{ZK'õ#¯(y-bÂgîJ3¶0¸ð|1P3ý©h~Ý l¨^ÜIàI¥Û†k^ós_-€ë¬¬s0*EÆ2môÔØñ‚¢ é=sJ50Ð)^ÄØ¸Y¡Ëì‡ß‚ƒ-ç;…b;Í®+Í€Òâu6\FñÔpÆ +¼r>ÝÆ9Š×yšÙ·Ë·;¶=ÐÉ„oùþ‚e ŠÊ‹=é覮ÉÇ( áöÒ²cDàCvŽ}áRÖm’má«îÜÛôJ͘ѡềݸ>¯Kuëà›¥G#zľû=Ð(þ¾Ð€”†4® D‚¸sH“rþ(ÕÓ¨„![\Õ=§Ðo©ãT£ÙqÁûû÷’—IÖkàVæ/ŒÝ@ÍÚ‰y‰%Dz‰Ñ%·à©ÊÂú€äÇ’ÁPC¶ÉTRŽž Pb:ĺx>r&HLAØ >O8¥§ƒÈÕf†ÛíUm…@oòzn`eVÝ·à¿ÿÅ¿î&²ð6QÞðFNO’Ч¤zNoÎ ð³’Ÿd‚û¤ÉM¶EµJŠïùû”šÂ똶Cß ¢6Y{ñ88ãÜèXÄ=»lQ­_Z5Ššý$Õ§SΙÀN ¥kÂ¥TÐ÷;Λ­¸÷·¼(¨ÄÇaÒÆŸßãéê&§ÛÊj¼ j8› íJпv¶HÇ6Â>„hàKÞ‘ ]¢¥uutü…ª¤¾ÝióÑ÷•c¼îNæu7pTº"“ îWç”mß´·d^08ö~ºOù~Æå¤Ä[£%*ì¦ûIãÚòµDÔ^«pMl>‹ËÒ%t/žÜUQ‹j[‰âÏüœÅîÇ%Aëkƒ?aT¥g–~h„~=Mþ& !”þ›¿Ì+_Ѩ™Š¼8°?I+·äÿ©Î endstream endobj 20 0 obj << /Length 2412 /Filter /FlateDecode >> stream xÚ­XmoÛ8þž_áo±1K‰zÍ‹K{í!‹6í"Æ‹í¢ %ÚÖU–¼’Ü$Àýø›á eÉQŠî`À|9œ÷yÈ׫‹WïT8ó¤HeêÍV›Yì‰8Mfq D˜³U>ûc¾Y(9×m§—*J$Åbé'aäÏïê…ο-üpnökÓÀ|œÌ=uE_úþâÏÕ/oW]x3 ?¯?A¥B©Y¶¿øãO9ËáÓ/3)|y° ÷³ ŠD†Ð/g÷¿^¼FnC9KDE2ëI%âhÉPøaBܾ»¹_Ý,–!0ÕÝd;ÓÒHSshêÎ ê†ÚÜõ[þ:š*34Êuǻֺúв7KTW˜ÒißLÓuuM«H?;Ü·WÔó¥—ÚÍË@Ä2ž-}O¤óûæã‡ïháÇO«Ûw÷4ø,CY: Îìmçd0™19 €áæé˦(™é²X7šg€†gO惇¬/[àÚƒCæmV7EµåSt×?M »Ü¸[}XÖÃZ„Ž.»§é=ÛáóØ™ öA ^‡s£3l§²~0M¦[sRQk¶VJ;ј¶È¦SdM/׎•]±e#¡èÎAs¨›Î©i—žè'ÖOÔ.ߎǹÙècÙ!Ó‚äîØêHQb=oÃ^YÛjoªŽ™hwõCõÿæà–UYT IuÅ7Và¾ÎÝrž– \42©ˆ‚È|ö}ÅkÕp­LHN˜(TÄŒîLy˜""·‹¥òcòùûÉ\W˜]žèª Ûngxz¼"z»ðä¼Á?½§ï•Þ£]±‹ÁŽíjáù°`½€ÿÒÐÞ[òü dl:+r·1«÷‡Òt|bY´Ü7äÇFvœ™`„Aâ Xï}ôb6Ôx¬Í•º(OLà'›`kNŸVBì<ËR©ò~YÁ;Àü6Cƒ ÐRB @Â2èE"UÈ_(’”be•é¥óƒÎŸ¯zËE••GÖäƒô)Ï7%-ë f$ì}–Ò/ÝyË JXÛ5}†,L'ð>žÞë¯8kè˜Ì¾j²˜!5Óq°„þS·#c ·-µÈê¸ø _¯È4½èÓ<á¹õ‘ô•«‘R™öõ”›û±ðcÉ;~”œy»o!^AýxyúPnöBsíài,<_Pc2t¦Cwi¦f;<ãÑE”;bÛv{ïü˜A†¾ hǾÂR ˆ¶/|d]Êù}_÷PΚ‘+­‚0:¹Ð”®|¤áyN˜ 8#Nݺ3G«‚;Xë`§1:§–<²mT`kŸÝ<úìıƒ‚©íOù%n˜Ì) m=l™PÞ›¬³å 'ÀJ˜>(À–WG&ãqŒ*É*^xÖ÷er~"mê'q0’Yb>ñæVlèOˆ-ãØ8ðýˆwާÉ39ä ÷P”%íXó†ckrêj«š™Éóõ‚L•Í”G?;×O<0ËÙ´Õ²ŸHݸbŸsúB2ÙÝí”zˆ }Ϲ!à '„Z¥qï­c> ©ÐŸ¿/8UMœI&}|ýΙ:ÆO PFnÙqÎ9­íÅU,%%˜À*¤C³šš¡3XMœ” ãX„çùî¡èv˜S£ùܰ8P ŒÆžc‡[Úd ­¥"ä5â1°ÌEÅÁ4#rÍŒæ6Ž¡-ªÜòËô8’ˆÓ©op£q&§v”ªŠê¬lŽTÓç²ïÂw Ð!Z KÖ î &¼4V§ÂÔö¢íh€€WhBį́ve˜-‹Êi ‡k³-ªÊê‡d£‘Kò¢À;«žê±ÓÏSž–ˆ é³ï%s»Ó”#2DÓP­®†r–¥ .[Amx!{èðOÄQs”JDÙdœ3“t­)7?\Cv»¿ fc o3:a[P$ëpà IùÖöŽo\ÔðýéwjV®D Á¤³îˆfxÝS.÷nDÅCB­ÈÝ¥«2c`ÿ]Òc™ý“Ùmþôáöýê÷ßz¹¦n®þ$¨©Ÿ©ÝØ,yi¡¥úÞc ©£Ó´/¬{îë8KÁžM^*’¶€c’H|®Øð±=˜¬ÐåÙ‰ýq’Ë?|\39®BÈAMmQ-§ô”™î8Oõªt9hªÜØ•ëúhóRè.ƒœÇð6‹/?`ÍÑÙ±Ô.° J@mSw%¸PyQ_’.ÿ~ý† æù*/§¬E, ûhÖœ3{ÞŒÕ$tèJB5 Eì…ꄱß zœÁÜVs-Í0"°=^„i°iy–ïÜ8`ç.” ítK벺nò¢BûLi)AˆÙãÂË—•H½SMU!Ö„¶C¬HO.àìá,C.é#êsÖÃ$ŒS ëT…‡’2ª7É‹ /ñÝ"ð“Ø‹çozA[:Àú3vП±­ÌÜpÀOxw 0ÿãû*HEJD¼—š8Ú¢iOë6MÍ=«ö±d4‰­6@±qp† :йêyÅ‚«Q},ùƹæôžp½Ñ [a}W-’¾z%#•“¾[ˆo-æQó­©ÜMÓâ¤fµÔ€%ê¥ÎŠü+‹d²ÒÔ`B\ ± Ò±è¦ $jX©`„nßÒ FX°e[ÕÉùØŽLÞ"‰lÈ×ÓÇÌ8Í… küÜ‘âüµ÷‘Ë¿½ìHC§ö#5ØYÿÎ]€âášûHF€KŸØÈꜺtóé×'§‡Pœf8>žBw=†Ek–Öf`«”4¢‚2RJí™KÀ#|¹Ö!9·Róð¹ñI€Öcίm|X§G´ÿ ç©XNÜ‚b9¸:ŇNïõ¿ìu,–ü#ˆ‰ŽƒÇ¢¦cW7­ÃÄ)¿þ¡#–œ¡s÷æõ-õ¨Âao_ß^ÑÔîôbÄ˹V–O/{ä™4‹Î)<š°ÿ;@šÌ©ÀmÅõ wz|wã˜êðü…ßó|¡”7çð€¿ï<ñ+Ø ÑàÿìÖ‹£x–† *уSÕ4zpߤMzÉÝ€}ÎpÑ ”H !%½ÂüðíáÚ¾ÃL¨ €›gÌ"wàûRA(A³(‰âƒwG|¼°Ò}’¨êoËc§»X—Ò5Ô7¦éßËÿy¿úÀ{I ‘šÊA¡ªA¬˜Š$aÕNÒÿµ–¼­ endstream endobj 24 0 obj << /Length 2872 /Filter /FlateDecode >> stream xÚµkÛ6òûþ «|ˆ‘õhIÛÜ%hš^ÖEîÐ×–m¡²äJr³[ôÇß gô²¹IïŠÃkrH‡óžÑ‹õÍÓ—Ú,d(²0“‹õn‘H‘dé"‰´0Y´Xo?»¥Ûvv¥c¡EZ,W*5± ¾­—Ò¿-• òã]ވ̨9™ÿøþÍóo—+¼Û—çÎv‡¢®rt­Ú]ÞØ–D¤®èçp>ÚŠ:cÉJÊH(™,V*Q”Ðm·9Ê$Õ,%ˆ³\®´ ƒÖOeNã.o;ý†ªÌ[šØ†×‹jSž·ù–fŠîÀç¼áå2 ƒç·ë¥„És‚m‹¶ÅQPÜ-a~îàŸ{E¤"!£¸—Q›ÿúôoÂZß##Ð0íwÚjë礈ÓdŽþûð)L4hÇܲXE±±ÒÀQ°…(ã»ZÒíÈļ,iÖC;®iÒm¿מój“Ó¬,îHÈÀhøyâ{ƒÌ€†xöˆSSw×úª¥Y²ˆc%¢Xþ%uÕT>Œ.+ºuCá^i¤"5Ÿ†RÙô{@X=‚1NE¢†W ’‡Ž®èK36£/e?gMlÀ&Ü€T­(·4}Ài}nhæ¼ÖÞ9˜ÈÃä<7uµ±]^Ù®¨öj}æD ƒ Ì®€]ÇÁkGš™»%çSç†GÝÁòZn7z·ŒE¦“¹Ž÷h0¹-5É‚S“or2P€öoÀ±¥ eQñ‘»|_T•{.°1óNøùÌ+Ä(g8ØÝ3¯)䆟2@ê²$Æ;ËÙÒ½—4ÂÏäi°¡²Çüé6o7l+'t¬Àb!ÓxΙ[>Ž, eW]Þ¸Û`¯ C"¢n&ÚºáCí¡>—¼vFŒK??*¥;'þûÆá;ÖÛœŒ¦IàÆbB¤rGn-¾”4†ññe—ÈF2eðævåžÒ =ñ=¢zûî«eº ÍpÄ(xð–@õŽ~Yæ°´9XRÖ ð¤¥UÛo¯jÚÔžòMá¢IpÎl‚£íÈpá•‚ð@k`@êÏÚoâ(X˜’‹@1yb/FÉ/ [ޤ`ÞUÝѸÉ-ëù›bÓ€fm½ãµ÷D6¯‹¯Þ~I£‰=ߢи·9l¤]6‚^&ý1ŠwY¿„±œ"Ã{¿\Z wƒqú\1×.†ô|å{ø4P aØÅVJƒKê,ò'uU>øÂÌ¥ÕôïžîœÂ½8ZÕ»)Ž»n.m'P2ýxqÇ@r¦/Ñ‘HJh¸=ëxwfWãb䱞ç•÷=¶>Oè #ˆLL螣šÉ$8‚Icª„Ì•1øIzcY÷ „ŠY aûUNg.”‹»àƒ»œ¶â3Cs01'`X)Ы0G 2j¼µ¿~ðkp°{8‘ÝàøÀ¸Ñ¯ìÔ£ÎÛ¨kêÉ[]˜lDúe°¥ù©n[J¸P9²©G *ÞÁ~Fh<¤!¨ÝÎ…¥ùl¸ŸßæËàt(Ò1n¯^ùÄ éiEý¤Û‹JÄZõ›vX|è˜`/V“•è VIÄ:‡7îšúÈþD@ù]C>q>—œ!è”XÄÅKÈ œ2ëtº=aŽ"¸žœp’úÃ`ê.p>¹õ*#äìnÜTž1« %½›ÖhÚ¶ÙòÖ§U¥¶Ù3®­íì-­p#P–‘¸Îþ‚RÏiÉŸþàðIs|B—:ñapi]íó†U yRðMß}¬›¼gk5†ËªÆ3u5ýŽ–ùØ‹9T’ØgngY2—0z>ŽÛÞúD‘Š¡S2ð{­™(ѱ+J®ÚPvyF?õ¹;;‚ûJ¸ÙMìM)vj3Ò¯uÔ1€!<ôi-Níݤ6ïRR£)ñD¸&gÕÚPôƃ´ãûª¸'€³ ø}c7ooÿE«Î0'(*—*Àò‡¢Ú²¯ˆÉ FÙpÖ‰áZ:$ð†ç¼Σ6ÈÉ;q›Vïz©#áìD%ãÝ‚7þËQÓÐ@”&æái/R`ÞÄÓ{‚N‰Ó9#=6Å©¤ÓÈ_8VyÆÕ¾ TðÒ«S4¼ˆIA+K[ûªWËãæpÆ:úzòlƒ3•ïy¨á÷*(ÚŽÒUÑn޵èÏT¶ù~Ž”¶îîm÷!nÉl/P÷¤ÝŸ›nE¨Ûó3­µ}ÒÌÛPíBZ2ãÇ—£ÉRO’ÁKû‚¤5©£”R1&MJ O^GN iP±å£–àN¥†@÷ÀDíhu⦆ÈàžfvΚjD3Ôý3CQRì0Ñå|ÛœŒç\vh7õ$¨E!zþŽ!÷´å± -“PÄ©â}ûâ›XùØ i¡Ž/¢3"vÄÁÞžhp‚:»ì°%âHyôæÐˆPý„ÕŽs)?}½·Ñ’ˆTâ^í{t>lÀêXÇÓÇ`1QŸD÷°rßsµ;¹‘Bv”]ä'άyŸZ£Ñ§šE*9XàXM¤ŸªÇyc@õÕÐY}M ÅÿÊ›XH9¼wµ%t*|”7ÉíHزâOs™C†ÌèÛmWl\Lq¥üöÜäŸbR (Ë{Ü¿³À½Ú«§d`X1Æ™}ê2ë§”J:ÖOƒÜ©Ñb# AìüD’Šs„ VNËoäŒ{‹–€“À„ÓÊU>8"Û–’jw~ׯô‡·õ挕PžDÂ{Yôžä¤ø’K Õ"”ÃÓ_|ƒÏ—±ô?VÃÚK}ºa ˜ ×½„Ûž{uV ¸°ß6zJ3xJ“Ll&G—–b±Þ€[e4![ƒÁ,'7“¤ÆT±áˆ/‹½½CÏ!§Y,yÑÅ£¢Íu œ\£Š:î)7eR5ÉùÒ¡¡3uL¶(-•~¼¯«i‹ëíìxàKæ}‹¾%”*oßbè긮!ƒðDøõá> stream xÚ­ÛŽÛÆõÝ_¡—\ bçNÒnìÆiÄM›Ý"@?p%®D”7"•Íöë{.3äK­ÝØX`57ž9ç̹ϼ¹yñÇo´]I‘¢«›»U&Ó¬ÈW™Ñ©-Ìêf»zŸÜ]i‘”]_®µKuš×Wk•[§’¿·WÒ&¿^)›T‡ÛêãYžHý7”PêêÃÍw/ÞÞ¼øå…\ ø“úHµ^m/Þ«-L}·©†™ZxXçRg-´›Õõ‹¾xs[aSesƶlv-`ˆÕýþ˜è,ùYXq}€þú§+´ô„«Måq56¹¾~«pmž”›MÕÀ¼¤u[øTú5åqËສ1 ‹"IOÕÍÒ"¬Ý 虳+Öã*5R ±A´î 0„m´«÷÷hŸè:YbB„á rù”5ÇšÏÓ `À¦<“ BñWÌsè¿ Ô©Þúé’¢<ê#+á4È,ý ñ\YI<§ö€aÇ–{^0 ÕziA@¬‘Ýrrüšd¤e­š#Î(4ä3%EÉ y_°+ë#F‹3XAo}ÔL¬ÿGZ(™dXù NW@åRÒ‹;|¾dÉHBŸ&­ÏVc[ †Ú§®Ñùt3å?´·ÛúŸùѪìΧê‚Á˜v¶HSI_üêP‚ú÷›ý‚©ÉÆ`_gEˆ#rÊÃ}¬©£')dšAÌ_¯oþ!Ÿ&ìJiîÌÊè •N5A2ÊÓðã뛇„‹¬p6Bþõò°-û2¸Ce€[¿{:%ÔŠ¥¹HM¡c:ÌS:´…¸E|™CЂ O!DÉTK…¹}ŠËôt{6ØÄ8çÔb¾JÝH¼ûŽ©å›ú‘y6O¡"èðmÕƒw!.GØÚ¶©vƒ¿å5ª˜ê©O"؇E`*zÈþ´kºÄ-A±ŠIíË% à4†Óˆ˜)Æ"ÏGŒ…ZDE¦R¨HŸ|™ØâjI®0`…$­ˆÖAæ“<Ì“Ȳ2ö–ù$]Ç$æa_7…ºKvd7+"ÿfAQµ)RUØ•Q–6û<‡(@+€eÒ<ó¿{ýí¿ß.Š8HˆvÉ u–Åè§ÐyŒ¾F‰Ô¢¶ÿ.He.8v™G¤Ü,œ…@0dŠ_‚ zŸƒ NHùúÇÞ-’²F›$dq¡FnÑ%[ “³,9¶=x;„cSÃósƒëÆrÅT{0^š/dOdj¥}ÞžL–ˆKöÄ~²=B^È͵›”Ú0¶2úùØjI“Ñ6©¨²Ñ>éEòTþyš€× bÁ/¡ÉÂÑd+ H1ùÁU)Ëíï'TÒ §f…ÌKê +>¢ÞR©´(Vº@ðyäIa „#+ËŠh·Vu Ƈƒ ¦ªÁr‡vÉ®9C ¼‡0ÜÏôœ;ÊFü¥LWñê¡(îsP«¢$KS­ÂàG†„FÇÈhà@^tGçOzs ¶Ý_`“$®ãRX­ûPQ¯1ñ=-WÕ!¼C­Þ»EeÖÕüº(›—B`Îdr•\OHò¸ÎП׶çÄp© DRË#8A^*®Yß¡º¶ AÛ“R Δ‹r(H_$Pù†C_Ø(+@« ^—vS—ç6¶×øUp+½g`ˆi o½E1:÷¼èØ×O¸§ža2-ƒ3øÅnù(•¶/Xá­»3 •™A\—òu¬çä00@ žc’+ÒQò|Éïg 5-mýäC=JèO.75]X‘À =æõw=×°é–ÒñÂÈfï/N7TøE™ E:œær4~9—‡,¸DõÿU=CÙ6 _7õð$«¦^_®fíÛ–Ê6TT´¥jþbÝYhHó;î\De£òƒå{¡ŠÐü×%ÿèJ‹o¡ÇÚ¬©K½ÆÌàŒE™Þb¬ØI­/\µ\ry BúÂ(ü‚Fx,êΗlOqz8yúf8ùBá ¼ÂSöL#,I¸;7ÜÉá]ëX-ºó”y´àÀ'«r´mŸ[qq`¼ ¦ÝÿWÁeZ®|û\ nÀÜêYœ>¿«N…ØãRùv-2 '+¹?p“…|oˆ´Uîo†ƒôæIËŠb^}õÅH¶a‘ ÃYÞ÷g.PãVÇI¡6ú äãìíâ¦=v^0Xï¯>xúTÝ7å¦â‡¡ o‚È×Q•?\~MLï‚ב»š–¼ñÂeÉo*u£çìÀ4Õ¢ç”iæÙŽÍ$UPÃeÎȬi=öSʯӋ ôÉ9õˆßŒÙ…òw†úº¿´æ=½Îç…£y‚nÚlÉt‹I«‰Ó†‹<^‹EÚî.&`À™ö'Žà3þ‘â+¬Q¸2¹$R…!æÏb˜LE7rÚ>ö7Èd®§Ó`ó€Ì*£ÇŽç½‡jÏáFÀZ—\·ÿyÄ;„¼“½çÎ"ûè«»S{à5’Ö¾'–„ùÀás•åÙ9¾jpÚøN ØåcàˆS磟ä/âƒv¾A¯º¥àá{rá._/ã„w:0³/Ç»(ž wV8Kè²p· #>‹ÚùÅe·àB¹Ð4—/>U-UÏ £Jmæf¨3ëï³I$ôÈ#”(À¯$¡E‘d6‰|°;Ðt’ÕuçCÍÕéåqËCÞ¼Ã@Õy cyåÉ+"0´$LN{QÆÆfsσ°Þðã|Ïï:°£ü-é¶ñ¾ÐÃ¥X~GÔ@´ÍòaâaŽEÃ5Þ6ìkfa†?ðSµ£·uàƒ„¿°Ã°©]—›šú’.Û®oÅDr[—ÃåœÉ÷ËÛÑ·ÓÈOæá®!ùö3h+¿é¹ã(0—*ÊóûÊ®Ú-¦š`Çâp-~ˆƒñ˜NÞ+ûÞ¹p®©æÞ@ZRù>9RU¨±B_¼R+dªí ÛëëEù7©3yôžØ„üÌóä/~Ã>Äojy×Q5Ü÷¯;F ßa6!¬Ð ÏžÖ/ÈçÕœÂj½¬ÒÁÙgQ¬µ×Mí…”›‘Ãnl¡Ë©žž™«‹ûÒÌmÅjRU~7°’[>*Ÿ=™ÔµL{]³Ü2ÈÎëë›+ ;¿Æ1›ÜÓÕô)M´w£oG=…N·?ßQ¸Fçµåº>èùŽn´qáøŽ :cî¤ùœ?$m4ÂãðâK¾ðJ‚¿KÕ&1>µÄÑ[®ðÞï¸%W‡_G‡ßù*•OúpEIn&‡G‰0êŸ;6 ¾IöWE닯¼ —>›ÈßxOÞxÛ´ÈÀC`¹ H:ò"u“+30cyZ8g¸žãs0øŤtoM´ ’bR¹_„dó¡Pþõ"ÜÆå$Éo”þ¼ g&G` §˜'ǰJB2 çoüŒ‹6C䫈Äñ6ÏèhM³ÑþÜæ'&1˦ÌBû)ÊÃLÞOs¦L@pØò\p¡`ࢼܧ¸RNã!éã–ø»!d O8æüÍLªÇ8âð 4#Ø;AP†RN*Ï“­Xà»)~Ãì`¦X/K°Jé'F b|P4dÑ3¤!‰(ž;GYFÌÌ8+áw`áuyü¸|êù¾°€a.£ kÔÓÿи“M endstream endobj 38 0 obj << /Length 2473 /Filter /FlateDecode >> stream xÚµYm›:þ>¿"ÒjµÝ‹Ç6ï¹j%¦&²ØŒr»UÅ$Ì)$)¾¬úã÷l’Én{«ªá`Ž}?çÅÆÜ&W7cYŒLl’Aò8Ð ÒMc +2RMe¬ï†×2¦UJ²†ddä×5T§»k¢?]Su˜Y íº1$òï­@1¥×ï“·WNrõñŠ 0ü#ÙD²îÊ¢úÍ%.òz-ݧuVé¶mka4ã)HÇúó1?ee•ï¸jÃ1Çûö°Í~oEЉüo¬â}™mvéÊ™4ãI=†›,­²¶ã2¯³Ñ%Ë j•Æè;ŸÍvÕ xƯbfELƒ4€ZÔ\1Øm¸t›w"Qô1U‰˜ú}üÞ£ˆk†ÀY%Xi­˜'VÜl»+ò%çž‘&«’¦â‹¤ÌYùutÁᬓ‰¢>ïC^¿~]¸qp£Åî x}Úê´^ƒßxC]¦Ûê1+;æE'‰{œÙÖœtjG¯Ÿ?”i‡2œD|k»Ýµlud‥i]0ôLA%`˜ª­j™UùêqÒrN.‘‰"‹@ýxȶKÐ8…H 2 ‡޼ªy@IÈÐù²Ï–¬u·ýÀG|Ìk>‡r½ch7[öû…eÿ_µu¤èÔüíFÂc¬ÊœæW SƒþvM†7œEФú¥p.²tûáSZ¾R5(*‘›Ç:UüŠÃ2ÛËŸR]æE\æÊ q¢óÙÝ6*¼UÓϘ»Ñh_ûiñ°J_ ÈD3M÷)V›œÿ´Øo„›Ë]ÑyHVO29ì˜ õî…Ö™{¸²6O»²]L­¯l1[Pð(§/È—ë4Ûð’‘–ª¢8aí‡õÒmo¦»O]Ã]œž±¦eZd`Y¸çÖWyi.R ÿËÉÔÕ‘¤²q8¦Ý>ÛÞd_D¸Á°7½ñR̬΋LÄ/,i´§lðxOÖ<²ªæä.w¥È¡´dãP]ÆxXAœŠ¥å!¯¹†óÜc}A°ÿbøùÆJ ýY ¯qç5&–^V™ç—ç Ñ Š$ÒÉMøL’®F(Wxu’ $HO=“ í"dÅă’Ÿƒr\oÖ©H$ý½Ô¹î4YáÉŒ—À•,-COÊ[?‰8ÝìשDÎA‰ÁQuõ&¥'0³2/š‚ˆ€IæÅX Š©´0•¿S9‡iHÆÿ€I¦Îk¢b".iˆdÖ/¤š*3˜cò!°&:?ô“ËMZUÒ>ïñºr†“ò'²Ê¼ÞL "/Lõ¦ü³0å‡ù‚NÂ+±¬°R(`ÊôLйqzB>ØÑ?ƒŸa³‹LÛN¤U¶þº*_"ÄæB,ˆÄ°Bza@(ÝM¨®‹Ãä–|¸ûW`M9¶ø—"²šoƒ—,¹y‘†W½.w˯°Ðq¤· (D%%²~ޝ«Hl?L56SÔ›Û¡ã ‘nò§m‘mEý]eXZVÇrÇ´Oá…þõëÿSîA“fP¥&¥bØ­= U%–‘ݾî6$&çæO©Y€x;z0ÂÑy?_F/S»owÐûsbÐð™Ri绢°ž×_¾P¤ò‡U^ä›´<ºA„ %¤Û·s†÷¡M °?H¢Xéì·ãÍ`{AålÃT(°iªD#ÈBP„À35Ö¢³Õ‡/ÿ}#6ÛžAL|wq?G®ŸÜÁþ<ð}g‘Øq¼°/Z$k[¡=¶£xvïOo,y¾+ùö8œúáÂg„‰íÆwÞ$™ÅS«1«oDÏ­ršG"°Gb³rrÞÞäB#>)4:†{ûl4½¿sA]?aa$†‰tÍ-c}ØÛ4â»gî…ž¿XŒgnäFO¢{ß·Ë;cǑğ3ö$rf Çógží¾ñý±;›‡þl:À™T'³$j9Ó1Ò°ù#¾7L– §¾o„¾§2Reíùˆ†Ð6A5à€àN"D;Iî$fQ£¦ ë€Ø[êërop5œøÑ·"ïîη]'q'šD–=™;ÓÙ<°“(˜ù“À³˜B€9ÞÌ 3/™„Žñ3–Xxù®tFáýØrÃ2{ä,¼F'ÎåÖI"¢ \^´ÄHÓÐöã‘w ³NìBéìV´6cœ…¶Ý*,|y¬=›ˆñ2Ö&~ ZÞbê/\Ïö='šG;XX¶›Ìl?‚Éĵ±g…3ÇsœØ·|kîE–7ãp>v€@oâ{öëXcî^Œµ_ŒŒVúÎaÑ:-½“ŒNê¬ÒÎ*(ž’*21½g¶7Os{ì[ {âÛ³EŒÐ{ãÛ«R{×÷¼Il-/Ž£ÅÄJÂÉ8öëî>ž2š.ÆjþFèÔ=™4ásVΞ(4ꮋ·“¢ÆGjv}1ÒS¦3?¾‡¤šAݶ&~0wœyl…s?†íû3kì%Ñ$žNÂdâycºñ,òÂ0´Ý;`m>`òÉÜ÷Æmíî!û¯ùŽKô;^üµm¤;†ºpÔ^>²Ã2îÁçg øWŽ—6íùVßEß«÷rWì¡K«þîôd4H¿~ç`ôý‘&î÷=ì>Ÿ£*²b'¼Ãîû‹/çuZŠ=X²>t³< µîü‘Ê#j1q¯À–ñ;Ëø¤sdW§üìå{ç­­£®WûMúõ¥:FD¾\€Æ‡í²î¥•8“úœrï>;ÿ)߀ÉóÏ„} Àr“¿ºÎäO‡2ãßF¼—|ÚKÑnšÀSë¨î¬¿ÇÛˆê†P…8=lj~6F5¦ÍfQUm5Þ@ä±Ó-ÓBS w}(téÍgŠÅù±ò‹/,:Ì”õô ޒع?m/U‘n6­a[g97¿Jëô¡yß`wÍ›]¢…†, ìó’ M•=õ²BªtЙwXa–a¼+¸™uþ´nÞ7Z.¶O¼ÎB}’ ¶U†m“bvsç Ý8­ù‚ÐÍt@x¸¦xx¨Û›æeª}Ì+Y{ûùš`xcäKHÓãW&> ;ðl®K®X¯¹°;Ô{a£ÊÿÃ:gì§­†Þv)Û±ÂÕà‘¦‹¯Tÿpv”— endstream endobj 42 0 obj << /Length 3841 /Filter /FlateDecode >> stream xÚZÝÛ6Ï_áG/«â§¨÷ É]zmŠköÐÚ>hmíZ,ù,¹Ûô¯¿ÎP¢´R²8,°¦†9ÎÇo†z}ûâ«·ÊlDšäi.6·÷›L$Yî6™V‰Éõæö°ùe{£ÒmÑõÅNÙD%®ºÙIg¬Ü¾oo„Ùþq#Ͷ<Ý• gn+ÔKjÈTÊ›ßn¿{ñæöÅ_ˆM bXAå‰R›ýéÅ/¿¥›t}·I=~ài£­M¬1Ю7^üëÅëunS“HãˆÛ®ê«¶Aòí¯©I‘xOÅï)™­`fÿÆî¯›=Acµ˜Œ‰u&Œýúë¥ùòDˆ0BX1áTˆD›aàK¼†eIž¥~lØšJr“Ó@¹4Œwr³‹†ÍÏ$Ýî‹úFl÷×ºè«æhpp}Õõöy©”ðp*ú²£þœcEy A÷—öÄï¯÷¿¦©òã¡§½'z,‰p¬Ž»nßò4°.0½Ùåy’êÍN€&iæ³+ÿ{-›=ÍäVÇ䉖b~<DF :4Lh, _¦‰Ìd,ý„xV&™±Ð0‰ËYƒ~>–ÍŠÖH½Àý& l6´ÂC& ËTiµ-.%6ôö\^¼¹¡0aÒSy€)ËÒÆ¡oo@ö¯>ÜÞÀ®¶¯”å÷.íÃH·üWœxÚó¥ìʦ§!ý#öµÔóe‚ØùS/ê+°B"‘ ðFM®ƒRÂ2pÊ5h‘P‚Z@”‰*ø¾èÜq€WW¤ót@©«‡æ¬vßAéq¡žvtðVì×l¸÷®èÊC Í欫;z˜‰~òÛKç Y\öGôWV³Y±-è§+÷-4A¤`©2§ùFi.¼4^Åxì nt¼0ï×ôž ~ɸ‰ØúpÀýlÉÝÈväÔdi'Ò9pLê3Jí•Bƒ9åHx†}Ó²­éDenIÏ¥u¤çØ8µ¨?غvåýµ¦ö¨úðPâCWðg@ç;ðôM³Ë}{$‰Çµi:ð„åa÷íûW_ƒ‰ôeÕð»þà[uõñ¬©\’ÐŽw4Ñ›{‡ªEè4Á œ¼´ýñÚïÚûÝ=›§7ålÂ$h·7Z >¼¡n`øpÝ—Le->ƒ#'Jí£ï#Ý·§sí%ögÕ¢—òÁÏJЦ@ÑÕþHìq2: :dâ|²Ñâ|†‘äB`1ôŒ¾ÅîÈ,8OŽ-~\ÍŒ qXQGˆÌÖ,¨ã‚¤ÁëT,»T3.yjC«¼÷ÚRñ~Ð í]Á)kç^ïPýQ®Þí¤Ù°)|rñ‚,atH徦ñ$$ZöDñÎì,qΩè¢U:ZuL$Gt“¦Ôñ«”–Hâeš¦KnâýÀ¥´Š£°ç£Œ#9@+§Y±1±\›&t–ª¶¼½ù÷h1ƒfb…sN”qO}4›º-nû®§7ªŽÆ5»lwñ¦Ù=•÷žårß3° ûà1œ>ÛS[·í•QÉ ¤tGrZجNU]0Ì-NUÓîŠ}u g´À–À'9Ma“\e -2bêÖû.!g  —ö .Î/ OE×]O<§-&-ˆ ¨­ú¢jÂ<´¸<„5 ï#|ÛŸü^›Ké]$y0#ñ>"…z‡zœ‡0 §!uäHå†T¨DGë‘*Íá´H¥¡›<®áD© çC°ùáÕž¦JeTå‘}.ßP‰Vv–mLñŸ‰‡c"vZó§·¯n?,z'VMYó 陹P ÉW¥ ¶4óU±{@PÞ·ô;„ìdÝ@åÀsð?#Ë=ÄþsÌ@b]œîµ ,AãŸ<Ã<Ë€¸ÁÁ®//œj°%Q ²[òT˜—€¨dR‡€QtAíµ‹Õž Êj”_¹r~ª=D ãÊ&º$m’‰A—‚U,lZ ‡°[ Ï„F6˜u7fâñ ®9qRζ½Ö>½ËÀoÑoÈà<ÙnïЦ>Q×µãÄÂÏx…œÇeO“_pT‹xÜ×(Ü¡·î´XŒãÚ%ÒÆk,#Eã 3zÎ)•)a‡—° `¯"% Ò§¹,‘‚~Ð v,ÌL$FÍpÛ@ø Þa&G†@ýCÄÊx8bÁVu Ø2”3AWq8pI_ï[Æ~G^æÚL"ûÀÈÚ(]‚Žpì ÑŽ“ñ¹¢eî©­;sÑ{ä|Û‡IçŸå¼ÂƇ ÜÔ\A –HLÓtû}Û~$Å Úóïÿ-i L&a2H¢Æ ª V.º=Ÿß™% ÔC>=rƒ‰ºó"rq•®èµ(V™n#9(IIU3IÑ‹qéQe` V^b|ƒo|‚SI·/áÚŠáæ‰Ìƒyó¹œS€rc©b’t‚wµ:e)fÙ({|´‘ø2´'J2:êë‡wö=¡âøýaPÑSÇž=ñËö‰áQP³pÀór£”)‡9¯f‰¸šÅ`¶ú®¡Áo«OÑ[ ¾R…× ¼q¤ªî\7X$: 3ž%È ·†”áísyÙÓ‹ÀAu€&n„Ô¯,Õžø›yˆ*¤ùdÁrqÄKˆ`¤‘xLOU¤Öëïüðï†ã+Ó¢ÎWoÁã–æ€u܈M¤Y.›%Ú …‹4@ÇÁW¥3…Æ]{m~Sz[îhC ‚C–"Éåì”ý£Ò ï[têJ䋭Ѱ¤\5@x**±QŠ¿œ¤“¤f¨ßËU`6K‡A˜òÏIùQFJ±h€Ýؾà1˜TC”íC£jöõõÀï §L¡ Ø•JϾ÷9×%Ħe º|¯¶ôèÝy€›H¸+;îª[²#œfdS2æ&wáM(O#ÍÃá3=ïzã„—dš!Y GÕr’|©†ƒ:ýýÃíbi™BûÒ LÊF ‰¨’«Á;â]ÀDµÈÇ)ð÷'ÐO<E©§¢¢¢qv¯(™¢zJÏÝѹÁ£O˃CñÓEÇ uÕðL5† æÁ*<¢`mJƒ‘r°÷…“E§ÁoIí!Ï…¹{$8W%ì/$%}#D÷NâÎSÒ¡¤ ¡kÝ¿Œz¯ʽBS’ͱýðûµëÃä䱺X²:“'bäq÷3mÈŸÇŸýÒ¦,äq©™IÖ ˆÃ‰”ù´¾O dS‹»C¤G9ô· ‘éø9iFù3p¬‹ç`$ÙsÜ…NÒlð«±ÞÀÜQÌV̓ö<ÐÓšãÓy’ëaÂÝb: Ð*Ÿ ‰VôˆfÇÚXÝSð½^¹*¨\ša¦êj>ß틎kî¨Üc]RÌë’¤p80Ö|ôû&ßþ£Q¯´Sóä[…p°z¯—š$=qÕTý¢H—XeG‡½0•…äÄÅ­• Ó1DRÉy ¾‚÷B×'˜¥"=pæ XHâŠy©.@W.F¬:¨›šèâFE’Šáâ+$70i¨ödð{¥«> Øl©É…‚#+¾—&N7Œ«£¬Ì‹Áš'LKöc‘)ÇdÄSï½ä dbÔsNFeókI»Õ!<Ë“>âü=Þðˆî MÃÏñPœ»o–}˜KrûE5œðHŒùºÎ±Ì0HcP:Ýù"!é¶G§27ÙÄÔR´iÚf¥;´Áº8Ÿa“$Ä"O¾ú\FÅÜh¨o@[ÃKà‡ì¨m+* qÚÆ{–r@åbDü\¡”TÇ„ž;XÔÇ }8s4±Ë†5¡ˆi’°äç¡>V}´ÆkzO Èr¡$E¡ýõü·Åûxü*"œ3˜Úï–Iוçõ®%b\eöœc‹QÅ%z¼i\W%ˆs¹šè;Ï<=y\š‹RÊGSõ'°ÔïC%ÇÒÏÌ(ÛúÀ8ý®‚Ã)Rd}—¾’€@bŸc¸B»¹åJ¶\ø w¾¨#Ì€µë¶y`&®ÍÔö†Òeg¾üál¬A[`S@ùò• ø •ÎÀægpìu¡¡'9V¾¯V“&ÙÔÓ­½ÕoÍ6a.õ ӌ̠D*JNdÈlÚò ÐÂ]£§ÿÞV>_Åö€•܈ÏÉóUÿn ¨ŽyÜç÷=‹m” (ÀCnþ×¶¼»¿°êÊ 8¬ ›/ÅØüžò±rÕT1F³S 7K“.7& ”aW×;— V¸„È…½°W8Š:Øx.§hwMÊ"¾÷_·Fô+úËÊåŒþ¿}”æ£Þ˜d!}¬³AßâZˆÎ\F×X$îÆ;niB¥º(ÆONÇ»¹–=t]Cj·¡åè‡aœš¹¿é×7¨ÖXŸy|õÇ“¿¼H·¯}ìTf´K•8gža‘ãgc!:š^• ¶h ¡u]ÞìjL"QXÛkð†2”=ñ½hÎQÚ¸ÀBõé¡zù I«Äê§åKª#£èVÒB€U°òaá®4¤i“È<E÷¬T °¢|çžÒgYø-ÈjLÀ ÆçA>ëROª"XR£2ä(6B ƌؗ‡„Õô8õgK–f´óÚØLµ¬Õƒ` 53Ûoß¿¢Æü"J ÿ!vì„í5 “¶‚ƒÐRübÆÈ¢2 Éõ ÝÝ«•¼Óñ$ïtC¦À¬Ë—Íœöú x¬2.•žÔ qp¤ÊêÉak,<̵®¿8ÿd>"O7C×;Âe)'y‘ËŸUvÖ£ŠÈç ŒÌìš°0 DÞ nƒµk>»S0»}âŠ3®h³©:gô}Ò¹*²ïëOÔÁænñû~w8Ž—ÔˆV¯%mFw,–Åo‡{ÿçîò…Ão‡ó'ß›$Ï2ë% h4³0Õü[[LÞÀ©¡ŠÓ},ü¤|\? ·ænöeløºÍ‡æùWœ|ï6ýÅ\uy¬4˜h0>‡c6iÄhã²!ÔÖþ­Èõ#5èÏhw+õ»dI7vÖàý0¨2„kzÝ…£øS ãp endstream endobj 45 0 obj << /Length 3000 /Filter /FlateDecode >> stream xÚ­YmoêÆþž_Áýp%"•×ë×\©’O „Ú ˆˆÛVG8ÁoŦiÿýÙÙõ qzÎU{"¯÷mvgž™yÆ|YÜÜ „Ýáó Ÿw¯—3×÷:®%˜í[Ŧós÷õVÝ$/’žp˜`^vÛ3=Û1»“ã-·»¿ßšv7Ý¿¤gèw½.?PÃ4Lóö×ÅO7ýÅÍo7¼cÀ/%Ÿ ÑYïo~þÕèl`è§ŽÁŒ¼Ë‰ûŽå8̱mhï:ó›§›/xZÛèxÌw«~XÃf¦íÑaüq8_˜Î×ùÃã8¸íÙp¶áîR$Å6;Rê˜÷ŠsrÈ_Ós’«®õ.ÉóÞþrÛã†mtÿLîÑX’À+Ç›t,æ^§‡ ³}˜²âpO3-¸°l`'WÂö©q<zžá*Aÿíåëã9Uý(ØS#/Y‘«nî˜Ì fOf ׳ny×Åsi)ÌM{—§ìµs¾ÏŠmï9)Òó>9КºhËæÿÑ—`Ö¿Õ56é¡ÈŠ?é E»¢̳}¶KÎR7êÒô4 ¡§.þ{zÞ%§jß3 ïÞÿE©]×`ïôLÎ|®ÌÉáÞ–i°©jݰtÃÖ G7\lpßïz)Dí\WÈp2V'OÇ£x¸zž,gÃxñ8ÍÆqÜ_-Âù|ö£Ùj1†Á4„³ùÓs<éGƒ(Æá`:‰§«xçÑh·zšO‚Q<[ÅR®í0Ë»2Äýý=ƒ¿{Æ”æñåžQ›1S/0Îm—žˆ¹B÷”+å~òŸê,7“ýz+._©£í\ä6JÁ4€>¢e4Œ—OÓÅl·Û¥Û]š¦é,Xõz½p6é ×{žOBÒGŸô±}„ÐAú£Ñl5ªXŠýKÛ®kKÃi>10îg4Áâðp`%7Ê/[fÙeË*[6µ,p¶ïÃL0‹ãpØ_ôûýÙh„£eò´‡‹Ùø)ã‡Õ Óž¢iG‹Ñ´£x5‡·a4›>‚a:Š–‹Õ2Ä”+Lw%·4-»‚Ӯ㧴¾^¥Çô³êÑÐÒ«)°g¹eµ‡î)OV5¤öÚ®Q‡XF“q< ¦QôGóqÜË8ç.ãÙ(XM¢þª¿ˆ#TÎ$ЧÃYýpÏ'ÑbO†PßÃ<6ŒÉå,—AjÊõ4lþ&@pî1Ïô¯‚”[ÎòÊV)Ë,e™\A˱!᚟ckŽâði5ƒËN£‡8 бf‘Ù ?Œ£h4Vãh>Ç ÓÑ`ƒGpÄè#„<v*4À9Œ uÛÝWÖWø*ñFýTÈ!ø|§ÑWa‡Ëe¼‡ó§ˆ£ƒi/çƒ(zõÃxú4Š&`Vy¯èy? ŸÃ`1‡áb:¥ËAzŽÓ”>«Ôþÿ™âšþxœyhËf–¥6do—sª( ÜXXV7Øeo‡=$Gê~‡Üª¶õíRÌuùÈzó6™Ü‚`ìê9¿†¹ƒ$nhë<ýí’Ö))Ø´}fq¸½Lp“–È4N³S¤j¬w—MšSO±UCëã¡8£Y»ÙË­it/"z=÷W³1M±“ôî½·>îO;Ú¸ŒX4眾•[¼¤Åû-7ºiª:¸t$|jТáûÌõôÍ%P>òEÛÀ¼œ‰ÙàqÁ›§É›:éôä^‚kf$™b‹aL9r?9©)N}JÏr8ã.¬¨ø2ð'&Ð3ÀËfi~Ùy“ãEa&ÑÊÛdcfƒm‡¶|Þf`€®YÞD7XmD]g5“ˆ9Ø,÷'ueIæHÕíî>)2š„†Ö.<«›jjNÏãk6ÅæáXˆÓm¬‹lìh¬8Ò“p’쳃:E²ÛÑ"‰-y¨$túæPghG+²\n¸ƒÃš>Ì·C†þ°N¤£ùV]ir RN|}KJ'¨%œ˜§Éy½'à27 ˜³Ø¦m 4}ðQ×*}tO¡ÊoE„øYNM›Ö 9¸(¿ÞÏûö~P€?©›Îižêkç—}OEXP!DSqûD96:½%€p¿Ò3MÖ[lÕGH¯º^Ž—Ã¦¶!ÂFtJÏërZY`QPRÊl|Vó> íx RFé™Ôq`«Û ¶.xpá¹Ý½ŒmÂsº†rÔÝØœµÆ^>î›ìšµ—g‹Ò°›MNbŠí9-Åï.ûƒî?R'a:ÀBÒ ÊÕ`蜞ð|–ÑUGÞ¡K(­rQ-}-éx #Cc¦e7LŠ„ÿ@ªk,1–.Ènm2 ªWÆ óÃÌ]zx+¶ÔF(Hsà´Í&ÃýÔr4$ét¸BlÔ®˜*AÙ+ áíL© ¹âUÚ+ëµø½†£ՔÈé¸ýÁ’£O,)¬2›Ê çÓª‘/`¼!Y!Ù·3NÛ骬J2’]~¤VMIê0›ã>A ‹Ë¬,Í‚¨<¹ø‘6QÁ@vH€é— ÔÝ´jÉô Az^íô-À¶™ið¦Êýõ'LÄqK/€S·Rà½î5=´ÚØ”mWÌÆ6ò4¥ðÖˆu/©¢ (üÑ·%Àu$ôؤE©pCo›ìð¦ö|¥'‘\£Q2Ðyw›È˜ê`^"¡:•jõQJÕÊÀ¸®}ñœ‚ÝrE§.k@?äËñ»–`¡‘”°£ž”ðH0—H Ÿ@ŒÀôäDÚºÕ̳}ç{ó‹ðKcI–*%í©ÐâÌ®`ÝÛÐÎÆ·w&kê+m³õV_˜Ø ä-×c¾é4=E@áw2âÓD|GCⳞíñ=ß’Åô*ƒ0< z ¾ŠíEÍ=ȯ}r—szµœ \Î"_¤”E%Ú•ÉMØÖgºž/éèwšÁ1ÜoÓÏÿ@C¼VÇ‚èìAHô›¨<^N’\+÷r ô¥Í #Ž|‰ƒùâêÚnï*AÓx‘P“Ñ;΃5Ê4§ÉN@½·jB…€ í»n¡Â®HXÍû•HþªŠ <¥&D–`þ5!R§w}úOS‹#˜+>Zñ¡ýÀ(\·ÉPH"k·že±ûa4 fÔÔ±‚b•\²QkÊXÿÉL\G—f®² õÕŒEÌÁ€r„_E«+;·ê®æXÂú—/ŸØÊq¼š­]ªÄITù¡ì¤+‚b.´ö†×jfyædDªf‘T·`³s|¨å옥*° ^2èZ]µJ³Ÿ”`à“Ž*Á°|èY2ŠD¬LH]‹>}Ôg…ýekºöÏf %¨€þZ×ë©’v•(åiÈ9 úˆƒ[.Ž~è¨ìô†q–hã^/9*‰Pïo «Ñh‘R•#™á0å:vóËKUšžÝ,Ïà]éÚ³š0÷ÚËüÙHRéµ^¤¶y½$ÍÅZßó¬(“(®¨xª¥xj5FŽ‹ˆuU…gí/I.‹ ü¥WwcaÒ畲4kIGu½‹_H”TË”lv“%‹2b.¯.L¢)B|šX Á<·„(8¿{Ë‹=ÿøi Aà¡°p*ì¿÷iÄøáTnÅõ7Ãí€Î~O’6ôÚ3<³vÌÚg*‹ƒOÚVSË•ãÍß³<ŸžÊå/¹ vÞg:ÁS™U}Ž‘Šü@õQ)¦íÈÎ9jÀÿ[J1ƒqHK¸÷u8Mr‰+¹@, Dÿˆ\X¶¸’{9}* ¬fÿ#B…á£1›BßßßMvÚµ/7ë6!œãœrvã§Zðr“ÙBÂep=µˆ±p(ÝÔŠ.z_ªŸ ¹°þÅØ]Íî_¥¾^N_õ Õïw€Dò\õUC˜¿ú1ò.ße/w9BBbÁ^[Ñ hd¦ü+è¸ÓFª+¿•R$ÓåD‰eàeÐ*“œÔMÇPàû˜³€:jw_›÷¥J×Ú endstream endobj 48 0 obj << /Length 2962 /Filter /FlateDecode >> stream xÚµioÛFö»…€EzMçR†Šu²u7Mìµc×A¶é”D[l%Ê©dôÇï{sð(Û9 ÃâpæÍ›wÍ»øìê໡Œ’„&lpu30Œ˜$)ˆJäàj6ø%º94JË* M‰óÃ!•æÑÙê©èÃ!WQ¶œdk˜7qÄÄS7à”óÃ_¯~:øáêà6 ðÇêDB„L—¿üJ3Xúi@‰€•p9Z­ŒƒËƒ‹ƒgH­¢ƒ˜$ZË6±T®bGìqQ¬ª´ÊWÅáPaå§ådµ(GHÈ@CãÁùU‰ƒ;°‘{O«üCæwæUfwÑwvœ®fùMžÍú ÿÖ¼ÜLÊjVý$/fyqÛ·ï¿Ý²*]<¸çݳíCÏ2g$a^DWó@BVVž×éj•nœ®3ÀÂ850?üN®üò諸RÅZÇ0bnòÉû|{`†e¾ôãt‘²¨èÐë‰(ïþ<§‰Œc"þüñòꔽÿ×ϧÇgÝ‹ èpJô”â™nÄYëX¦¨ŸlÀC™ÁQƒ`üÐRÆ»ù—̈³£KÎèÕQŸhÔ *(žTùE¤…žT)‰J$5‘î/a3Ô¢¦Ô’)£K~~tÌ4½>zÅi|}ô–Óääè5gìåÑ5güt/ñêuüC3þï³ãgŸK< ræq ž“$ÆI 8Ö¼&^%-â÷•\]žªZù§ÇÏOŽ?—(7D¡bX¬ìФâ†&ù8šd-¨/£Éš 1AËñ^A=LÔ9™f„{¢¾Èô¨nˆòÚSÄt%%úµçLÏÞ}J-Ñ™[Õ¨½tôF÷KÍøŠ™äܸЀ^ Ð2ø¾ü\æ¨Ü,—éÇÑ'7³ºqÏy~;÷0àÑ®"tº~­ ûç6ú}ô¯–GAy¥šgnÝØšMÃΑ֡êç¦ÄðWºÚp6À¦ž´¨j=@Œ–^à½óÙ]¸Ð:ªVøD²§ë,-3?;÷ëí‘xr8ÔÔD/Š{SÜÉElšl²Fdˆ)ƒ™bšyÉ‹¶äWbPj)¼-«%ÛM$ׄ%f €Í’ûA¤ÐÝt {¢ä Ñ0…¸$wÇÎ7Ë´ Ò´Ï8”"JÔæS÷ø½p .| EÿoºRßÑÌ+§7|Z©qÅAšÅªÈ§Å{ÄÄa"x ºÃ]1qÂTÀ¥ Ô¯’\ È$KÅÜ©îÒöH<«¶è,Øw½z&´!ßÅô>LÂFe€û¹ÈÏ×+/°ÚŠœI ¡¢7y5_mªF}’S”(-Êáuß±L‚yÕ*N[Ù¡UÕŽŸöaç„sî4®î5bFa*cMg_¥[\‚³ÇY±6µ>2­6 ÈÇ$á¼¹&‰Èw’'nœÏ²¢²öhAÀ[ôIWpB“Ì$ZÊo¸õ[|?Ò.Ÿz^9ÐhÉI6M7ÖõÁJmnø2[M7K@éÙŸûT­M’¸â’ꖻŷ¼pO{áqà~ZmÖ~¢J-m‹àT¥ˆ÷Y5§àt­N›œöÞ'¸wZ6†=ëEƉæ&Ùw/®ú’ØHdãç/ l,ÓY¶‡åE>Y£åÕ!Õ‰4áÄl‹³8ã7ˆˆ.Àb±í|ýx·^Í6Szñ5õ³Ù:ÄS7±L«éœØó˜Wê|4$bî4Ü@Üél–ûØ*!½ì`W϶”.„ý€uÒªCÄT²Á›.òÛ"X›°LÙ ù,sG¤n~‰!ÙŽ¦«åÝ" õ[ÍR+éúghMPšI–Øp#™g''Wº•¡ƒù¢¶D·¹ØÚ¼£G»¼£2Vª,‡CœÛ6p<ËN<"/·°¯³;̨$*·bUi§`uÏØJ9m væÒ&ßÄs¸‹Iü€/àuí)k…l§c1Ä(¨40yn"ÜŽï¿ÿ¼ órX­SÔ­Ž}Níó`ÐojÕz¦[s_§k4mß#àçc~Þíl½{¯ùÒW‹'WîùâŸ~ýúøõ{ 6l’¾Ò{£n[¼›·;ŠÑ>ïévôà–úÍþÿ"ì*9Ãÿ_„Ýð‹1ü 쯳[€ *Æñ:˜múÜ$GMogŒÉó/fcÀ‡õ‹±duweäK/0S7q6¬²õ2/Bj‰ÛËw·%Ƙ~;ÆŸG4Êv{Žè8öJÆøÓmñíÌ<ÖÌcúð™Ø™ãOç„W;3:SB.mTrB‡€~ä=ŠÖ[Š6ª«èXˆFÑ1ò{ýÜ+ô[ëš÷µö¶%’œŒñ§CÚÛ™GK$~„{9ÆŸÎ ¯wf}fò˜3ùé:'\ïÌ<ö̤×Úê†,T.£vgÑêê?C«ò°Cøâ~ u?Úi@n5sGݶdÝ@ÞÊ?.—P ߤhiѲµEGÁ8‰|↮ê¨>5­ 2ý'¡Ù¾„ÔdÝô„ò¢n…Ðæÿ­)á]ƒˆ ldCüÛÒCì,Œ@Ù‹v7ˆ›­Ä³Ê)2ÆmáŸëÕï˜9e…È Ì!q¥š¯3t—z$(k!=u!Ë…„¨¨ }*Q@·òÇmç¡e'Ñ,+§~e’Í|VÜ“€"¬M zöu!BèÈ=UÈ"ñœÆ¯!eàR[pØ[,PŸaàzL01…lßÓèL(˜‹ÊʲP¶ÛWìKðûªn¥ŒûnTÜu’›ž G¥£ôgd¨¾ÿ¥XÄ”È:vt$o´Šà-]â–– Ûy{Ÿqå.Ϧ­ƒ©MÒÒZzŸÂÁ8ËÀ˜ºÚ³p_3ÛvnaÑCÉ-#—±pe© µ{®B7'Ül‹>ƒ¨ „7^ìUVÌJ‡àf½Zº¥VsÞØ;Î5xJ{‘Y»ÊÆÕÔo±²öU&bó>ÿœú}» Ä CË:À»¨d1º»‚¨{¸€¸¸’8àÀ¡m ÂÓ*”•î£%NÚ|„'Æ%žŽ—}⪴[ß϶±Á«“ ޼\Ü G±`¦l)(ún‰¤œð¦²§wH„ŒáN1xН*DÕÄÄÊâbR~fSÌÅo-ˆæbËv¬NTèìàf_Ö6¿Ä±v mC¶í^ýXãRÎ|Tc­ýPoxp¶U}Ú›ì²åƃ˜…o6–®Þðå‰ÕÞ¥Â3’û‰Ÿ ÍNû-Cùãupî0&é$_ØÜ',"­Üȧ'î–;°Æ©¸s­>xÒm«bšÞ8ó®Wª!‰¡¾Õ€à` uúü¿R;í&-@MT\›žô9Žä-ˆ˜HˆQ >¾¦FñÞv9' 01ìУh-« \ÿîd` Mº1ä¦ÛùäAbUóÒðÛ•°«Ù±nŸÆ Ïà €sÛÃ9~cÑ H³äŒØª1ƒØy(T,iè·1NSåœ~xkß|-KˆcÑ4÷é L}wêFÖ¡áàù¶CÃÉàÐìç¼Ò=KÀ>¯ŸÜ„Y?ߤhžøØ¨9„î­&l'Y@¢ÐÉ¢ªca“r|­¯²h»Öªé±#ÀbUÜHý*°évz€Æ9H*Ð9à$~_ÍÖn¼7¬à¢¿`2(dÛ„ä½BC1®ii«Ý¦Ël/?.†!Û Œ¨8Öšƒ)C$MÛNÐÅÿº~*y endstream endobj 52 0 obj << /Length 3414 /Filter /FlateDecode >> stream xÚ½Z{oÛFÿߟBÀ¡ „ì¾Iº—Ië )òjãâ€Kƒ‚’h‹-Eª"UÇE?üÍììò!¯œÜõî`ÀÜçììì<~;«gWg_>—zÁY’³œ/®®)OÒ<[¤J&:W‹«õâ}t}.YTt}K“È$«Îc‘i#¢×í9×ÑïçBGåvYî¡=Í".QA0!Î?\}wvyuöÛ_0øãà 2O¤\¬¶gï?°Åº¾[°DBÏ­¸](c£5”ëÅ»³ïÏžÝç6Ë’ZR¦¡3âöÝauuÓl˦?¥Q·j÷eGåUÑ`AFË’]¹¦RßÒ·ZÃÌêúŽÆ­ŠÎÏm¯é{D~"…}\¢°>öeÓUmCýï¹ø"‘ÊD·›r_¢L17I.Sø‚¤UN¼[ÞX6[€¥Ñ@sÝQÿí9gQY×Ô ;,ºÃm³¦ý¦¤ÎM»mëö¦=¸©ëv[TMr+ØÛ‹†õ›Êuãnq;È/|N’Ù—7¸?Ü £=hÚÂmeÙâi´Û·ëà çsÏ´Z92Qm[üÒ‚ÚÀJUG#­y:ΰ§çy)i}D³i›xÆ ´=x(ÐïùÌ>'{ñçáæã–#d/åQ]õ}ë¦bä Äi„Šžã2¸HkÛ]=0ŸkT+5Ðd9Õdž 0‹ %þáëì¾é€Q%<— cT’±ü!㑉’æÈtf ŠŒ'†HN‹~ûã«§¯s33“"1Yêy³ÊÙÑ&o«~ÚŽÖIîÃÍxùôÝ[~;2Ïõ_ÙŽb2aél;¯Þüøî2´‘Á²Æ3÷ˆvBÊ”ÎÚ»]›µ+u4²¹ŠÆÈÛ‡©ÖptØØ´D“<ôTi›úŽJŲõ*w×ôí7-Øß)zEPu„Õæ[Ü0KNƒ<€'¹wËösA$4[dIE ±Ð<ɇ½ç ‚NÂOžt»?¿7<ÍEÂÿ´§ü3I=Ö`8/_¼¢‚µX, ¶@:qc™œiG@„ön`—¹Ö÷ê,ð%\ÄJ4j(cÑ۽Ō7ûbK”Þìz0¿.$@ "€ˆ6Däëv»µn]d ³ªÁe)ZhŠ¥aë^`H+ö½³›©]—Ý7Œ]¡¼ytãHYc? bsC-»b¸Ø–`[€˜IQgv6¼Bãºêv »½ÁާêF?6uõ+²}óòèõ×Ï^`IDÏ ]Q#(Ë .î8ðá1òÊËÇ‘LpòD&$×t¦˜à´ ^3·HöÐõAN§q·/WåÚ±êxÑo‡ \…ŽŸµÔ€À¨ä¸Àå’6â'‘§:QœÏÅ2PÊ¥§¥bs@ýï< βèꜣZÑ€®t#‰E(81ÅNBÐÒ:µ³•ëD#yú …ÛQ®ÜøuI—ÕCÝû“½ú»]Ðw<.ƒ¶p©rF“š…’íÌ_ªî} ÎI UIžè]ãMYïB‡¯Ñ—Š hU ßtù¸IB{“:Aûw®ñþ.Í'IóDŒ‡ò· &ý˜®+‹ýjóIÊ™¶ÐÙÍEÉ”ïKJ)&Qsªè²b"+ŸÁEŒÉ‘‹{Š®ÊB«#ª³CXdqRGZ6› #ŽšÈ‘6'¥‰^zˆÿn«!+(t>†hœìxê&ý¸jX-0=8ï(OsˆJèR²vÈ­8§;‘ÿÔcÉÓ—¯K [;‘&’fИ×—áÎekà;9¬¹,3–-¦…ïÒ÷9[kÿµXž1›Œ¹ÃrØ[,»‘º_“Rµ¶ÅºÒ kD’Æÿc=ÃóÀà f›fŸïõÜñH‘ÏP¹m(l* ÷à¨m8$¬¶Ë®;ö2`{é&;I"c£ÏøCÙæ(m‰R²»rÕCZÄ)ø#ç [ ÔÒÝ©TRሠ5¢ÈâK·I s lÚzýˆÒŠÜ&Cpäpµ<¶Ì8®…>œéÂz%¬ cNÈÆ#틞dÚt5ÖšPH¨tuâZ=¿mÀ"ÖÃ"-ª¹¬¶¹Æ{‰ pPw.¤_R€½ý[²MˆæÕæàâ1–†YpJìsú ¥êÚõ-~rª¹HLžÎÂôfLº{rI¹ÒSát‘W3‰›9´‚¸Rqpz<¨¸=—2ð°ÌÀ[‹nI 0¯økË }¤±´¸q9çÕ!˜Ñœç#¸«Üª$w÷N¯y$2O²¤þ?²F §ñ¾ÿ€ÄÞ|t÷!LìwÌàUÑÁFžGÏÏ•vY§•—ÐJ¿‰Èg÷&ÛPk[ýjh§—Ò®\ÑA >èU+7óÚ­á#½…ÒG®ßùŒÞ=0·H¢Ô€–_Úª)×të²¹õçç`@˜-ÇðSÌ "CWú<½Kê#†èújUÔ>Ýïb¾ï'û_iì3Á¦pY}\Ó¿/ø'”D{éø_…ØGxÉÍøã‘ë#i§NÚ“!s±§þFÁÍ©yð¹i:œ0\Vúæ„/œdfè¡È.0Þ0Ê0òI-ÕcÙ–š¦U@O†Ô…çô ÀQˆ|NþDŒÓzX|‡0,9Qnf:ëÄK¿‡ÀNý…äŽà8ë¢À›^ѱ<³Cá~lÔØwº¢‡ ÐÑÎ †;ˆÓàý—ŃŠÏs÷0ö½|™Ë§Í߯0»|ü~åS¤.ûboeÃ1ŽtKÍSo‹½£ãÞ‚Ÿ½ÔîÕ}[ôûêãøjËõEl_ùçì²ù²üèß´cξŒíö†‰ä×þ°óÜnþeŒ¢ñOÐã: -4Yç2ÎY"¦E®&o«u¿ñÏóÜ„#L‚¨ pñ>ðáÇEÿY£+7 endstream endobj 55 0 obj << /Length 3597 /Filter /FlateDecode >> stream xÚ­[ë#5ÿ>E¤"#m¼~w›—´{w XÄ@«NÒ3ÓwNHwnÙüU¹ì~dœÌÂDH;n¿ª\®Ç¯Êáó›«çÿPf&8s܉ÙÍí,,sù,ÓŠ§g7ëÙÏóÛkÅçEÛ e™byu½¹±rþj{-Ìü¿×ÒÌËͲÜC–Ï…zF É¥¼þõæ««—7W¿]‰‡ÿDOA9¦Ôlµ¹úùW>[ÃÐW3ÎŒ¼õ73m-³Æ@»žýpõÝÕç¹uŽñ ¶ä†I“·ûr·N4ŸwíõB 1ïZ’€ 9ßÞÆ¡’mùÛ¡lVeXR5“q9_]±,Ú8û~{¨×Ô¾/®%B žeY†åË¢Y/¶»®ÚTÿCQ•k‚éÐ’³-HZ;â]:¦?@éÊùÛkÁçå¾Äe ™|þ=|ÌׇUÕÜá幃]@*j,¡@Ä<‡Íý¦‹ÕõÂwÀG˜=‘¡Ê˜Ö:N¾Ý#ÝbÕUÛ†©6»ýèž["½+÷^-PÔн)@v8é /Q&‡ŽvXﷻ݄iß=!…ÂXë˜0’dbˆ¡eY{êoI§8ã’Z«¢¡Æ¾™”Ԧ͡Q¬V‡°ÿ;êÁ+ŸL…«VEM%|lŠŽèež,^Wθ’SÉ~›’«´Œç&Êõnx]v7'æ~û!t úhKTUlsNÎÿ½­Ùó Úº¨«»fS6}Ö×è_ýÕÂ*˺¤s¨ÃKV÷Eô YÒš¤ ètS9¬É6ÿvBºÊö>ï›â÷jƒtôLzÞÐE´ÜÐA ¿?HKý^é YÒßuÕîêòMÑË ¦áiÿ¶ë$Î!3ÇrÓëÆ'Ÿ&o t˜9NÕ±®ëf¾.ÛU¸À]çuÔÛ@JšÒfx6ÕýÅòœ8åX»¼_Kml8¹ ×Üûâ‹ÇÕõuˆ?Õ©5ùvZë’"ÍÝ×:­!´ºÝ¡÷’+7ÿ±ÅKÀ™h²8¼Ú6ÿ>4!¾áÀÛ M['©€2Lo‹‹’$Qþ¾ Q|Šo´qÌ9;3F2‘â ÂQL{ã› imqŠ„½s0䀋„;dí}Jr0Ñè>ꀓÓA;R¢…;‰·uÕüçá¡Ü™µŲ̀œ™\=éP"£àÊï¥òp(ˆ× ª€B]&/CUΚP½­ê2©ÐæöR ×üÀ\!ô9ÙûԤܤÈଗ9‚°ÏôuµLP…š_涤,×ê/ÉÍG^éæÍ¶£Æº äÝ¢ÌÉÆˆrG£äÄ Aý‡æc Ì=Ž]2¤æ‚‰¬wç' 3‡Ã^H›tŽêè.Î& ŒåêÈ­Žœr{k—Ò,-×éÀ'3&3uäQñOBj†ÖÇqMþDK›B¯{—|÷bs½cI,B®`96<ÖÆ.°ØqjF‹0Áë—o`\.ãF[ú» pþÙqÇDê‚rÜ€ Ìô–zú„E‹ýêod¡Ÿÿt_z`~ÒË i¬zßð!]ÆDçÌY÷¤ûQ\Àå÷ʲ÷¹Ͳ!zlw1ë€ðÙÒ!­ÏaËSçu@é{ã%Žñ½9µEóÀ)iªBb½QH·nû®OF Uë*JsDÐÐ&k†ÖãGrçr²‘oÞ†)·Áßûêî~IÌÈUbZƒ68:ª¥ì¹ ºH%/S`št'àˬÝœÈ$( (•…À=Í@#2ç·²u¾—‚ZÓû*àð»<úŠätÔÛ‚´ê2tíïÜ}y"ÁeJo`FÊEÄì\ÆÅäq°ÀcWT>ÁèøK£ú^ì‘‹§,ÈW$ʶ%ƒÒX}说¥LB*…^oëwŸ9PÌØ)§÷§Ôî”ùI°yDÙADŸ¥¤è@é1º!’‘6ž}ïùÜ«r`ðÄ)s QLYç pâ9€é,2hÄt k…ßB žU*Œxüáp>¢øÓ\$ÊŠ¸—íååë5 ˆI^J]dÐu¬U‰ýÁÈ2Ve‚ˆ½¦(!˜´rª)/QÀHeÑ—* •¶IýjHÔ3ºœ¶ÜÆde#êXKë‹G܇§Oºb™ÔPmk{Ë›HY%_*WÞ±ÒpѰ–ÓD½Ýýñšç\ð?þùÃÍ7òÍ÷/n<p¸r‘Û”3ókœ×¼oþõã7/^ùUþˆr!ùÉUž°*Rƒ±åB¸“k@´×¼Ö8f`‰LF©§'¼ñEd¸‡Iˆñ±Ž íÝ~KuL_¦?Cå}Rl_PtþŠq lùª6®^¯+ Ý’<™QqÛSWr°§K5¸—÷‰oÛ­!·NꆗS©¸Æ²áºéuwl±¢àï(ØÂåæ­_m7pYI;<…°7CDñÈ 3µ7àY·Ù½ñ™Œïþl4 YÕ0zöŠÍø`f"jü¬šŸ€S¤ÈË9Ësx²>ñÄNhïVq/%tŸ9â”a@úE(ȵ”™R>“=Z5©˜$Å®Üà›úÐE úû íX¨t¤JÆû¦CQ×an®Æ†ˆ‡ûÞ‡%ã`9óœÄ0ƈCþª 75tjŸÂœé¡Xw¢Ö¥™ÙÌ ›Vasd=²j¢&‚M€ã|ÁñüAÁÞÜÅ 4Ú …¬‰jå!#\Ò¬êú\p|82bÿ6¦B-^)tyµÒØºâØØ)䵨vTãB+=¸û›H š¶÷_*¼ è‘„O_o=q˾0Yij殤Nâ¡ôðæSÚð„Gcx*üKHô†„³bÞ”X² Z€VvaAµÙ¡Nb{8HK«{Òt Ê'He#D0<`¿XÝœåÝäMBÙ盪]¥6ƒÉCš°®öåªÛv™ë“ábÛîÏYóXž¡„e™Ë€·Ü'”OJ„%g /îÅóà† °~k8ÛÕ©cZ æß㢘xk o ulPÚï~øîëð¾YxÌU‡7T `My0yüX†Æ®Œt=ôh"ºözJî«X¾óµÊ,?]«´س#ö÷%A•V{ôúWìvpâ@¤ÛNK„CI*…º•ÎüNÓ*áËP†zhx+`Úß´}Z~ïr–+A:ÓûŠ)ÿœ €q ÚBe€8ò‡Ä¼#æ^‚¨ÁŠšÝÿúø××ÕÆÕ“§<ð±Í†'í–úÈ\¡sü4‰YøL´¡áeθ “½Ï“ Š Ž<úª sz1?c~´¥X‹?ähçñÑÍÒ«¼¶z>úýÈ>8ÿ–gƒ+ÂÆÀCø±vŽa¿O räÔB”ˆTVÍGáïÇ _€ò½¥BgGñ¹ikL’_¼z1^Çí\ú­úâÈí/ì;ÐÑ klÞ¯“&(JŠ ¶'YÒo*|nì ÿmU×D%^)}±pü4ÖÒ õl%5$âDA[å6$YØê5kÒ‹%L•›‡„ƒÃù“h197øb.zg÷ Í‘î¨5üJ&ýâ•€>‚Ð@ͬÍç?!‡ iã(ÏÂ’t±†å߯…ê^åÊ?LyòÑ"3òHÌ)Ç?°Øe—'y@JJ¿—Ìô9'K‰ËPU€¥d6¥ºO‰â¿ãZ­²XÙˆ¿–+ªz€JÊ8ï-pJaÄ0–¨… É-=Œ•ÇüèØ?_QÊ©‘Õ- ï>þõìÔ[—â&¸]nƇ½G8 ÒÌ¿¼¥1J9ø¨hýŒ~aHG…þ§MôYµi—‚Oã}üHhšÊ¸pˆãVÉ'âg'™ó;eÒLôì±fãêóstÔGëñ3øî+ïøç¬Gñ…S.¦)Y¯„ynx†EÏN%>gd(ÀK;Ü® ~ÚÏЋù­DfΙ*DÙÑ%hZÍ8š' UˆO“… 6ÔSrB]ƒdéL£ªAˆHêA½ˆûW£¨kTÊìÕ¹Òb¨Ç²*äâgUÌG!+¡Zæ=T+sg p¹qîBSó¸2k—`긾ÍL2¥ÿ´r%/éËÛÜÙsj§Á<Ê.q é–ÊÔãÄ·J©åEh‚}ÚÌ¥Dx¤’ Bû'T’cHQ> stream xÚ­ZmsÛ¸þî_¡™›N¨6BðB€¤Û=ßåõœ›ôìi›Iò’h‰ŠtLª±ÿ}w±à› Êšk@X,vŸ}v™‹ë³¯”ž ΞˆÙõÍ,,JâY*¦“pv½ž} næŠiݤ e˜bq>_ÈXüZÍ…þ3—:ÈvËìÆ£8ê95$—rþåúÝÙËë³ogbÆáŸèvP Sj¶Ú}úÂgkxõnÆ™‚7ßíÄÝ,4†­¡]Ì®Îþqva¥U>i¹fRÇ$íâf¾Ð ѸõáñdÌ” aI;õuzK’V·YI-h¤Eó@Ï\ó…àÔYÎ%Ü‹uF:Ù Ønåp{W5Y^Ö¨§Š…ž‰?ÿúãÔ{’}tX%Æ{á?5_nàR>Ý?|ñÔH–$I;N"˜oÑEPF³…”Lsátøêd^滕FA³Í°å\ð`ï,^T7ô¬WÕ]VÓœ´\Ó`Zä›r—•Mí&m­U}/iÞ2­37³*öÉPY÷·Ùªi§øwŽÛa]¿ÃÖB€Õk§‚—ÇT±0ŠZÔÊŠ„$ÃÆv.‚|³Íê†ú/Ñ”ðÖ[Òbï&v§ý«O.I¦¤h7:~-ÇeŠƒ‚vB =-×:¯o‹õû€vŸ­Ù|\o÷ή}j” „Œ4)2LÆRsÆ9>ѵf\«VôïyQÌJÊ ‰ƒ†Ú­¢¨—–ØyÀŽvi³Ú¢]áô-šŽÏ›-½éÎL¢„b¤ÅP2ÙJò7Ÿ°B€cuÂÒ¡@9a¤A9yÝîî´ÝJUfô¢©pÍÙBñ„ÉÐŒ5UÍ[@êÕaŪ¨êŒšwY‘6yUÖÛü¶¦!XÖ>ë,½[m=P³ûwØ•’—o©I÷°×ª0bs2F|˜k0!¬J„€²wÔ§Ì×hsØÉKz¦ôØ :cð¤v‹ÂØ¡0t'¶{ŒQXI,BÏ<alµ{Ã`m¸Çÿ€Á‹PËàG2‚PrÐgr`y¹)º›vêÁΦV«ª«öÁ¬7p¤š#“᜘E¦ðï"‚iÑáÈÆë¯,’ÝŒ @†w²é,fëõ'ƒÍvµ«-ÞKÈSt°Í ?yÕ»ìÛ>·n R§¥{Þmö[th4}ïY>toZ‹š|ñ⃑¾íCnãÛØQ…?÷.T;`Š—%ÑØ&Ó<†Áº¹{ÖßöÝ”åF˜t…ŽúÕÆŽfÈ„ZUžOÅ»0‘CeÚs}º¸ÔÜëb‘I·E “¸:¤8Ö²<+ªp¨«ËªÜàÎK%úör¿oõæ$»wáÍî]mP¤ÌÝ„“Ñc'ËŸÞ ®Ÿ‡Á·=1ì›ÛðÉ"éEGpÈENŽhÆâÂF#\U»Û"C“Epƒû~5 Ÿà3Òþ4ž÷ʼxPÆ‹Ÿñh,Jóh!q”qJ²…3j¡™@ë¤v÷ÆÒ­3ã"w†Œa¢#þ5¸lV®Üœª,™B¯ˆnÉ ˜¸;ÔBy¯+da?‡ÐmšÂË$:´ï·OÛÁ۲ɜ·69)¯e ë¬?X§“ãiO«}‡Ä¨bÝÒ—f çU´û;¾éÓÌði‹˜V‰‚%´9d,¿ÿ1Æ"…œ;Î+3 M7 -³†¨µÍ$a`U­IО„ñ8‚`{˜ÒÝû½a u^®ÁlÉÉÃ)«Y:lE¥¼LaÎÝYÒÁ‘ž8çÌ$ÃëœØß†¤vÞ j&@¶â±×6ÇÖŒYÜEbtÎi‰ òŸ¼{Úe¦Î­˜Qñ*lò1¡wa7>36ƒ¼ß%n0œ¯Sr´Dìu‰ uQ Ò¦†D¨(èÇõþöØ#äÎ^C‘À…DÒ³–)°ˆtçlh ¸áØÍq¯eæ¼c*$£Ãñ5žäèæiGO´¥Øc?ÿz²Ÿêƒ0Po÷7Ÿ9WYí:¼¯ÒÂqè@ÚM¾«vãe€ÒO@7I3¿ ñoò"óZ¹5êž ¬l7–ß½Àjìy[hç²Àü«ỹ¯®/ß^\©Ñîcǹ/+JWùšZ½„8¥ÈÊM³­éUã&/Ý˼\ûuæ~hS]íè¾&V JǪ­#àîö¨Nàè p)…{ÄìFµ×t@;½W=Ö:J‚¦Pïç"Xþž­'’ÎZS·Ú7›ZéM§$w@²Ûl•£Ñ#ÇcË.ÓQôév½Îñ˜Hð"€»††WiI‹-3—.“ô£ï©:h¤«¬ªIÁ½FaaV7^Ú1ÓƒÇ a‹ ¤QÈiza#µ/Öô¢¬Üø0ãÚα0ÞÊîªÞì’CÒwéøÆÑ_?.Ä"æ˜u·Já.AM~lN$“â Û;ºIâtÙQZ׬¢EãÔT{X_1Á¦¨–”øbP”k«2Ú .@j¤©Cs64ZõbÛº®!®²oÑ·xpfB"‹¹Ä`H€´aK8g¥Q4ù1ƒAÁ¦%‚!Á”¢–[P¸ Ê™nÐcôh“6ߎEp•5 /ƒJ¢âŽ´ %@©àÏw‹ö7£ë»ËvƒòaýòšN7m”hZ >R3b=¡<ÝP§r“0‘ÆÁÈédwr`¿Bºq§P&«‹‡ÛìN†wU Ñ~²rÏöVèžÚ={Æî™´¿ï¢•¢à]Ú ^ ;Ÿ¥T¯~pázß<þ@*8p3 Ikœ„Ç>‘)[– «Z…>p-“è–Maà9ÂNõ K @«µ)H>ed°l •cÍs›âó®/ì£ï˃¾:˜’‹â¥JtQÁ’ÖGßÿë·ëŸ^øðñƒ|¤Gœ`4'r4—åãÏÏ;w¤slÒêàþ–þ ``Æ~¹bì#c¬Ûæ—«Ÿ^ìYt¾mM xÌ~-!ŽiãRp$l ENq1ꋱ‹Òižýùïz6μ¯p¦%¢–ÂŽL`½ ئ5 .àE6”>§rJÿK7ËÆbšN¿ïé Žæîm9£…Š$nOdS­(:¨½¬ªên—€Ú¸!¢’ý@“¾à€Ãƒ‚ƒ#"0h o¹üd—¯×…ûÅÀÕ‡ëÆ“‰ø*KD»­¡¿ŸÀ£ÌÑ91‡«‰VÃ>ž0 –UÞ¦¥‡À‘ð‘ðÿ'áÝW ÐjeMšG¾`é˜qk„ð”f¬.íÕ–f/çøMÂØ/Sp/«j·ÌU•ιpÌ_íKëõ1ÁGû@ݸwݵ?Æ2m_÷Óò{•Ø’> stream xÚ­ZmÔ8þ>¿¢¿¬è–hOìÄIÌ'ÁÀ"Vhï€9i$@«t'3“S:=t2Ë"ñã¯ÊUv^Ú}€î„4m—ߪÊUOU9<¿:;ÿ5Ö  ¹¸ºYdRd&_dI,´IWåâÃòfGË¢ë‹uœŠXäõj­rªåïû•ÔË?WJ/«Ý¦:=Ë—2~L )µútõÛÙË«³ÏgrÁ?éOˆˆãÅvwöáS´(aè·E$bùb'îIšŠTkh7‹÷goÏž[nã·‘JçÄíz·Zkà(Ç£çâ©\Äi[Ú©÷ .«nµN`Ñó7ÏÞ_a3YöÅf¥¢åCSh̪aBêå®è‰¸èïzZñ1ÒQAd\leÕÔ»º¯JšÒÔmE_êþŽçÞ1éóªùJ“ÛbW! Î´ÝÔ›ÃJÂM¸I ßb-ж–p_‰!±FëT®–÷Õa ýeÛc_.AÚ¶¯û¯°WäæmIƒ{àEÌᜦ¾mw•_ÖÎPï[X àFÇËJŬñɩ̈\y•ûÛ¹SµÌÔ°XŸBr呹©{ÝÒQô‰ŠØ†T²€Ô ‚4gLç l8½WwõþÛõ»[¡ý!„»ê Ád ’ëÈýÌz4a 66EG¦ÙpK¿”ÒÊYJ ý®J»­.‚©"”:õÑÄ<É–‡È£»‡Í¿«-„®u¦S “aÊŒŠÝ}ö¹‰0óQlF• Ý&fÛXñŠù‘µl î1È ‰g¥‰rYîwEͨå~ý.cíXX³F ‚©žÞÝY®¾´´õÉŒ+Íán}í-%C„NF0„R‚£XÕ$ Lh† _0þV6Š\ŠRäÌ…gt/ìdÖ]¹A·ªûõœvTííÑ,*Q áTŠmWêïú9$‡ŠxµÑBEâüIõë!É¡j*0]w½1THsŽ“÷÷lì8÷n@CÞ‹’m Mµö¤}ЮsÐrú£Ó$mxBûÚÊÒæœA·qŠ=Mh,ì3ïÕ6tªÁ´…q®­Dž$“à?6Z•Ä|/ÐðF )ƒwtjªö¶¿ë.µ•fsJi°–¤9º™e$³±–/ölåÛ:Ž oœËö̼µ#Â'Ø£Ý\ï² HUšÍŠ®è ¾@ÅäVÀí)!±ÉÌTÀò„€©ôó€ÁŽÎ*Zþ¾Ðw©¶}ƤÈLvÚá¦ÎjFžeL¨ÜÇ7„`IQŠ‚Yyb%{sB²xÀ§Ym±·)´[;¬ Qe°.è±uÍ`âŠÆ¸’òD’ÌàL®Â »‚²iTïíþ‹ó%CH%„Aù¾_lZAË…["=ŒNbn`c4†Ø nÈ»7=­JN X±&°¾.¿ÿRóh¥C8j€«€éO0Ã:Tæ«<2&/™³_{õÛ µaQ ù™x´ŠÿÜ (c«Q;OE@pÔ!%âý&×=‚Ñ ü$‘.«¥NšHÆÏ˜s o¬ÀD¼pü\cxÔÏ sŒg@ä >š|b]bsBÇ*1B O¤ãÇÕ’§h®2ÃÅ_hž;“—1•Ù~<½¹ã#í­kÒTN±1¡G,üñq<—#ØáWWW†`c‚Hp8íí~€R±èyrè”F<}²ù4ÿµ¯Eì%$ÁDoì¹X fñÉR+ÔÌ#΋ëóëà»@ YAêôRô8±®˜ÄùÊzKrÅ :H&á;ŸS9>¤¥y Ûxs⢆·¿Ùs;KHçž_qÁÔ¬ ÿÿ~8– ¤T¢ d¤×PsYÚ«÷W\~»~1›„£Y!-«2@“îDC¾÷p£XërÚS¯¤‰Ñð*ñ¨9óèûàÜ)Hõ˜÷¨ n#3!sõÛ”an"¡†¼-øÆ7C‰¾©ÛªœUò-*á+‡žC Ö§£°É€f’B‰Á^K={›ûþg¦²îî›bű:Öã‡tì Óñ¸åа5%¦ ]H¥›ªëG©ùÖ ½Ë™úÄó°2qГÉOMnاeôèƒÑì¶)דÑÇáÉök£yæ ëjÛ?|_ZgÀ‘ùŠ*E®‡àÒt{æcš¨š„_ǘФŒrüÔL•ö“Õ }ʪݗ¶;ÊÖ›ò/9”ÔaüÊ0/õõ IS“HÄá$NÄ‘5wA–Î_ £aO|¤YN-*J„L§OÉþå {Øí†'?›Öã·ÒSbj‘)ÜI‹$™¥l†s‹áõ<ønžÚdÏ¿n•A»‘B©ý€ÊLýÜá Üì…¤õ jNuýø­äd¸âE-À˜S€9$:ÃwzÈó¡V±œÒÞ6íb$ÑÖb«'`³ÆhûÊÁS랇_bù*!Ë宊µ«Ùš¯ÿõîêUB n›‡¾è!àµ|l(Úî¦:àëŠ%àŽ//© *$?}BC o³F?Êh2O•f˜’æL6RdL²ZŸY†#V‹™V!Ã7ÐñÅLêéW@#È kök_³ÇvûØÕª÷µrAhü‰ Êæ Ì*oE ~Iîc –Q}À/ä€þŒ¾‚™wþí3¹…Â~Þ š[œjåÉÔÜ~ùk*Èt"hÞÚ6Þc÷…‰…­¿¨ÙF®õ—kÝ{Ú½§­ôóøþï[×p”Ûâþ³o5<ÿ¦ ™+àqÆ«FM2)»LÉ+% ò¤?:ú ]‚ûÎ!RèdÈüdâþ×Ì@Ôê2 endstream endobj 65 0 obj << /Length 3445 /Filter /FlateDecode >> stream xÚµZYsÛF~ׯ`yBVÌ1æÀ1Ji«dKT‘^[Òú¨dk "! ðú¨Ú¿ÝÓ38ÈåÚì&%c0ÌôÝ_7øòöèÅD†0h>¸½ÄœÅ:ÄJ²P«Áíbðëð~$ƒaZVéXFL²$EFbøz=âáðÓH„Ãly—ma>N†\>§„ýãö—£óÛ£?Žø €ÿy}‚ÔLÊÁ|yôë?‚Áý2˜„'ŸÍÂå@E‹ÂÆÅàæèíÑËCjµfA [!aBÔÞ>f# T ±-+º©>x0\Ó¡8-vYI÷éÖ¾r¿ÅUé¼Ê×+šÉÙªÊçiaW®}+Ë|™éÖå| ûÿ/&Jµ©–2dI|z DH«„n¯â’ñ8v«ZÒe?dÊÈÇîr¼Ô‚¶. £Ãxfɾ‰`øÕŠäÑP7ËP±‹ÁŽ •¦ín–yõ8~?RÀeeT—)òÊ%È.X-A2tKœÂPÆ-©²ÃM¤á îˆ-?ûøáÜdžTßÁE¶z¨Ÿ8™GLHávMáßÙBàÐs6©«‰˜¯×ÛE¾±”tôúÞ RŒ1 2¤è- ¢ÏòÕ*_=àmb·…ùŒ îb&ìI‡Y˜ÏW4]ïøÇõ"I¡Ú'®H·™} ÅRäwd®v9rG+Ë 6YÍ #v±O† ¤#‚Z{éÊkŽc·¬cH5ßÏ};ƒé)®ê¿p¯n8 ÂZƒ$°0$ÀXñ¡åí'ß)`|2Œò¿ã”ÿ?ÙVK|øÂ§´¾XYâj£u4ÖGF'gRue^~-«l ëa7 ¸³p¶mkÎt`>scí7:ÖÖ~…ø8`‚V9£¥}ö%ã’Bí}¿}wÅq7óÒo„£y9¶~¨9 ã¸+“M‘Ž ]‚¡ˆ:²4÷È4^Íž8¨sÞl³2_ìÌ“èpi[>x_s1ØkC¨ä¢6¢Í—>¦ƒXµ™îœ L?ÁIB+‡ÜÚ‘ˆQ±t*†@_¤&]”cµv­X¢âF_^ûç1ãImÿÞ}$ šÐ¼éq£²¥¬m t@bÞ£Þð îTGfÕ6þz%z-V6‹Nȼz‹c¦tÍüCºùãé„âå~¬P…|ÛÞíB'uÛfä 84¶©œAÈá 9ÚY4)k§ ÷-iÆŸÖ+jÏr%y6>8Î:ýä7êAÆutÞ—^ÃPý¸‡—òifÈœA 8¸cÎ’-³ò1¿‡­ÀJ¼úA Œ °§7Ç*CÀ7zî£VJ&#å±? VI×b‘# DŒ¨¤ùÖVg0>;££9-ñ­è«æý&Íã³²‚9¦‰6'ÀÒÄm‡«3¼ù’.7…õαŠE Ë"Ö˜~‡ˆëމ½0$LGÀrf \‘[äì*‚¼H7Pne £ÀãÀ¡ ÚÑ`usq›°Ø‚ø?|ýîúbzûó›ËëÙtzþñöìææãÙùÕõÇÛÙÅÙ雳ÉÙõÍÛ÷Ó×çW“«éx|1=›¼y=}óq:¾<»¸ùùêòö­9ÈwÎ1;>¶Ç0Ò)Þ»«›ça ¶qŒS†r»„ÁUpàíø‡v•}Ý.aÇ¬ÞØíSÇý¬øûõí…cýôúâzvþêòúýtzzzzñî|¬Ý“Ë·7oÎϦçWÓ««³‹×ÓÙäìí»7³wçÀúxv5=%Ö!]F[:çtt•h °£+3ˆü¸Ím1& ¬ P½´+0É x®Ör}–ÄÀ;IíÖ'Bþ¨O¸‹Œù‰ü‘Ÿ„ÞhïÅaýˆW%-ãD;”4að“px\t‹G¢E6Š`Ì~†rƦ@°Dî•;„²9n À™ÖöJ™EvÀÌ›¼Ù< ÚB=\­«½ Î6QiÊØr;Û7夲Ê`ã^Ð¥ÙB #¸5,Ãõ!§Ò|E·YJ¥ÈM¸Ç…ö‰•S1Ý” ODIµ[%‹|•õ`03ʃm_=½m7ø:Ò}2h1JªbPý zuyqzM‹½Àí³ò8a’×E$3}ÆåL\ò`Æ/匟…³>#—*jŒÜÐÃcÍ¢éºêÊ3ø¡Ünå¼”ØKáÊ–m‚LÇ#Ø€‰ŒõõÂ+Z%ál·x½±  Ӓ޹Ë2;EY§‚êÀt`œÄg2 Ó? añâÌKB`²U‘ÌΟóù#@Ѧ´'’¿GÃͺÌÒ(Á“¤[q#øJ`=®Ë¼uÎ3;ŸÚ+õF lÍWefI³•;0XdEFóäÊŠGM†ÆD' Ú©š¸k5Ìœrƒ¤ÏÿŒcu¨Ï…¿ø¶«;¶Ý¸¢Ó…ä ^ŸkÍDíOø~"¾(øÃk|"ÇÔ¿@L·sðüG{…?‰Ï ÐË1ÝÃ:¯W#øJjã™ ƒ~ÃýX] âÌ¿7‹¢w·Y÷³J¨æëÂ’Ïø1Sð‡×øƒDŸ‰ÜΙç—tå3ùÁ<3®Ïi<ó²Â¹ 1H0ðã.'Ü›—¥j{GŠ]»x¸I·e–š>ž1+˜Ú‹Z{“x³+íR“a” ×`tö)DÕ“ÅÏ%Íb ªs{WǯÖt-Ö«·Ç6+rKÕWš¬Ê?ùÛIP¶ƒ„ñe%b¦Å^pN^½œö”CZñNY êÍÒ2wmhÌâx5£!6øÌÐFã¥é]š·]+mâ,¾öÁ¡|P=êäO«óM«ŽõÆš5þQ¤Ÿž®¯ÇEþ»i3ë]µÙU4FU‚ 8 °/zPj‹æTL©=œ´*"JKÝô 7-“Ú‚âØì¤”¬¹[±·J/ŠX tW`7‹5l#AAA`F¬Ê¹­7&Èá¦004²i0r™ ÅÚ~Ñhçšêh8u¦ÿ|ÎËþ>X£tËNûd]~zðwüx?já;›Ø×L'{ÙÌ2Žftó¿L\§áËééÍ- ÷b³—F®Aˆâ Ï{‰ãu\ØÛ¼¤#[íX¬×¿ÛQ)ºÔšW­„/ת­ì®`æ&¦¼­G/nîþ5¯lßZÅ™iiÄ&<ã;“vx‡‡§4çD‰ëLNröÖÓ{ LލEåW!(=ŠšNñ2¯¨%ˆZvñ¼ÔN-M‰‰ ïÒÒ @' œa¯‹¼.ËÜe_BpÌ2OW¦ú#°A×&ôRú5&kÒ¯×K:E—¿¦’¸‹Ýû^ö"ÉØïÏ&¡h‚Ý{æ;QǬifÞ˜¯€MCË\ ÷Ð6ÓB‚rWT4>€(B%}%D$oºƒŽ*où²¤Ám +%5|]SÁvê(”}(;€0œŽõä‚$G…·µ`  ?• ’„A|í0­?/+¯¶uÛ",£(@RŠöL4Ýl Ä7 pm{u—\CùBŸójpÂ9 ŽñsGm×/ÚZ žåvÇ,ï3]a¾k×¢,«…•â·ñƒ=Ê`UØ¿Üdó 1•&L¸ÎÍÁ7ˆÜ³ û–âÀ©t<Àr[è?™Ã!*¨ 2{Úfñ>…h󸔂õÖÝÈ|ìh9¥î¼v=p½‡ÎG¢•™w óºžý1‚--̓%”΄_AŒ|ø¾GŒR°”zß&ßóMÜ“ZBê¤%‡s·òÎR˜–åzž§Å£¤Ý£SªÐ½Z ¥ÐYfé Õë¶LØÄ\2a ¿…E¡óõªJ1x»9¬ÔÝžû¹Ê”ÝB© >@Èjxû¸+»` `L¹¬À$ö™ cë#PËmçûèVÏ»÷Ï&çÌè¿Ñ18óÙþ =΋dõüŸ µf~áùjñp~·M·_ý€ÓQØJëÑó“Þ6aÞœ$ßÝ%Œ›º¦=¸¹7¨˜ÅBü\´Á ¸?éGiQbPL8XÒjá,Ø ¾ +"?ª‡sFÐ"ȧ²D­Uï¯|BiÙ‘ƾm$ïýè"õ3Kyèkèvk+o7Š‘¨×œBÑ«9Ù´‘–ú0(.`ä5 ÀÉŸ Ê"Ć8[È´´Ô9y@oÛ±B­‡¯Aåe… dŸº 0mš¥ß øãÉõÿ‚-€ß,ìÝf«#`GEÕF¡l™’ß‚‚LÜÅùˆ×2ë¨Û¨þž.‰âmº4£ØÙž™u¿$ÃùVD¦^chzšKzjA/ÌýðÜà± R‹m)[¿ÑÁM& }è1Lºe,2Ñæù½YŸm­.÷?›¶Ž4½nyU®OÔú¢ë2îJ»S%s€Î°RÅ*`ZbµÄCgÿšt> stream xÚ­Z[Û6~Ÿ_a´µÑ1—¤D]Z`¤mÐÛ4‹™¢»èöA#Ó¶PYR,¹Óù÷{.¤.¶Æ“lFä!MžûùHæõýÍßÞf¡¤Heª÷ÛE¬Dœ&‹8 „IÃÅýfñër» ä2k»lD"I±ZëÄDzù®^)³üc¥ÍÒìèq²TÁ-7´ÔzõÛý7ßÝß|¸Q ÿT¿CŠ X䇛_“‹ ý°"€‘GšxX„Q$"c ].înþyóú’Û42†%¥Ú$Ìík›g§Ö®ÖA\ãG-Û&Ëå?ÒÈK¦TªE L¿Ò¶`ºˆ•vLM—0*¤%B_[":z¹ÆK‘&ѧs1£•FB%fª^±Š–5šÚ0¥«ùÛÚ&;®讳<§Û;ÝÕ§®9uÜ&§¨ÑäfyÈ:žé• ÌçÌ€Ë×ÄÆúà&M9V ·~ÎÀ*ùWVž¬cy{¬Žå}oT©KÇm•,ºå-î±X2‰ k¦¼8þpŽÍD§#.×¶~3ǬK…ÊOÍŽ»ÓÁVûýµwj]¯{jŠ<+Ë'î>Xþ¶§ã±>UT?ÑWZ.Ýœ§ºËº¢®Üz`5Hô{Ëýç´¬“TDaè™úlŽo#bu,œš L@M‰°,ÿT¡N£tYoñ›8…¡Ý£éÑy}(ª]{>¯p”¬iŽu–ï™î©Ýž<ZEÇ#Ù–Êæ_ªBñdËsz÷â™ûAÆ R°}Ý ¿A¹äÔî5Ðá7†ÅTpËÇŽ—‡zSlŸ<Õr#;€¥:÷»-Odf(! —÷ûSË>ÇÁµå¹OhÓúͱ9.=c¸ „’ºw¼ïØñ¤RÍ14"Q½¿†õM0’Á¢nþ„í:gÛ8©JÏCàhÁŠ%º_-‹²¤´Î Î Ht äŒçE¬öfA""éB %âå/{[ñ¼lÖgM$L¼BazqÙp¼Ý¦Æ¤€‹{»]áÌHÊ b'æÈRB™`ª%Ÿ’—s@kÁuç$ „ìcr½q¦]Ocsœ®²i)€˜¨ã|” —ÈÁhÐýªö¿v)§Wåʘd§9m@eU(CcQ‹ó?2óeý¸Þ»ýœ QI¼÷m•—§Û¾,¸®`ö¹®µN¶Ê­â±èönº­vݾõY³{ÄßZë„. zLü¸/ò=gq%P´IvÚgÈ ãoØ.ѾjR‹HÁØ3 Å‹«¤D.#‘*q®–Rò<жzÀ=ÍbþÇ^/ÍùP0:i#A‰ƒ˜Òó=¢†QÕ6g JÛ#þ;G¬8R•Â!.4Ðz³JäòÕÝýJv^1ƒ-À#tj)6þ—¤*lde±«Žƒî4é3)4ÆH?¬ÜR>5BÎâ½äm7Må„c(áDntëGG¹oT(ŒË®hJؽF»ÐÙŽ÷c¯¹qÙ§ܖĤY{·êõØvWýÚñD5‡¶4KCyÈ£áK0¦lN—€äWÚÉþ¨YXxs¹E´ x s¶jb=Ë®Ûw BF™·×4…à œs†þjë…SÄ´Å[Ž+Ÿ­ID–?ã&0 2î:;3N¿Ögæ- ÄÏh¡ šx¤z6ŒPú^ã¢t\ "w¬ž Ð5Œ¾H²8/kÛÓŽé0wŒ*zÇ:hÄÝê ùpHa@h¾£ù÷J…ÎÕñGûú„Gloê“ÏXca by†Ûó½åB=…Âþð[ÇBŠz\Ù`k_SÏá‘„jóY‰D—ÆÍ+]…ý¸Œê!öO/CÒ;[mü‰Š>yݬ\-JBÆ$@0ÅÀºzö¾Î&Zõî±…p£Û“玜IŸmñl.¿·eÃèfzJÕUTaŠcÝ× ¢¥k>Aš¾ÿö§ŸÙ}n™s²ªöwGRΦP¢xjé¡”ÕE™‚„w€32G¡HÓ¾lü#îšäàiÙÿÒMg³MsraUeÀœfm>é¤Áw@vrN:wáþH1† à~õ.=ų¼2ÓšþžUòþîîÇ™{R¥)¡,šë—œa]ÞN½¶—JÓZa >ø2ž¿sw)k­4E|Þß½]¿þf$ê^ÜOòŠZ„CV¦Àáƒá%PïÆGhìçõ8èòcÖ9ÊŸŒ8x±«‡é|E‡½ µ­ÍŽù>ˆfïç¸v?õvÖla˜ÀYÀL@ÅnwuUL5zXu­Æ0s%#0êçîÊ«ë¦"òGžN—týŽŒ?NíÐòµØ&†oqðÜ']Ü»Fk+´ÐE÷ÄÊoÃÚÌ&$-ï÷>S@QÐú¬(\œ 8bv˜ÇÄeeºöÅ™’õƒî/ÕHe^ƒ¶Áù^z½{¡°á“S$´VäŸÞ°ž?‰Ì¾l›/çñ=A„g îH@ÖZy¼ ­Œ?£ÊÇ]ÌQØ¢°×vtÇMws‚íW™Ü*âôá,¦Õ¨Ä!þ´;jÿ:8]àúéPšáÁNFŽË2èYGFÒÀ±á„’x:¢‹T]\˜º@³.Ÿ'%F?}.œVv˜ÞByY¾/*W•6°é² àök …š^²phôú§Ž æ=\C"¿õÍù6¸a2Ü–\KÑ´éóL]ùº‰7©®4bPq­÷):›w¨æ£'Î>W¨ Lþ°"üq Jœ™êî­Ëx¿À•¶œ;f÷˜Ÿo¼ÎòÅ3™¯ü—ˆÿ‚Ci—OdßÑcç/üò`<ö€ÆÑ–6#> Ý Í¨ 2böÉùÝ7¯](ÎFw“Óô*¸ƒc–é•ß´yÀ3æ7iï(GÛ”™{¸(HÁx׫.5yWD ™ô LL†[ƒçÔ=Ùvù’€ÁÖþ¥²Ÿ>sžÍ‰³†{}Ñi:uñ®c>Žåp ÐÔÝéÂè&ë2Ì2]~ï®Qñ†—î# ~ñPp;Ê>ø«ŽoåºßŒ^b l¦ @†Àˆ4Ò,Š|ñù/İÕé endstream endobj 71 0 obj << /Length 3551 /Filter /FlateDecode >> stream xÚ­koÛFò{~…¾J#áŠûà+ýpˆûRÄ©[»í>£ $Úâ•"U‘Š“3;³|‰rÜÁ€9Ü]ÎÎÎÎ{tyûbù£2iÊÅíÃ"–"N“El´S³¸Ý, xYÓf¾Ž„Iqá«$Œ”÷¾¾¡÷áB…^¾[åOêW¨@©‹ûÛŸ^üpûâïrÀŸìvЩÐz±Þ½¸»˜úi 3Ována¢HDap¹¸yñË‹ËSjÓT1  B¡Â„¨ýw¨2¿ðT‡ÁþPoŽë|ƒ#Ò{*Ú-͵Û‰”zˆRÊP„1îj±í›bUÂÙyéh÷è ·²Þ·E]Í¡ÔF¨ vëüúØžrE+%â0¶G1ð|†/ZM¸2ÞOEB¦zÌ–}Óìæû舆IbÏ:«ˆc+æå§¾m¸jx­ãj[ÓšŒ«¢Ê`HÍ'šsó^HÜ}á+àZ å— a&HXòz»¬… Ýfí;ÃN%ÅM“g‡õVG³7Œ0ÝR:`>ä®”wlŠêÑm—ðþ»Ë·³’¡R[Û&k³¶®Ë3’a¤édèP?^ÈÀ;à¿lG» hfC³¢ÌVøf%{8Ô»y"¤HãõC»M|52&ÖÄ×f—K˜ÕzUˆªÜ‰ªØŠÇúé^Õ—8ñ'¾4/_./ß¾_~÷Û¯¿þðþvùÜÑ4heØó”Ƥ 9ð%Ã$¤g3ôûîûÑýo[8ÇrùôôtJ-óg³Ï×Í2kª%ÞΟYY x™¥O‘¦¶‰ ?2‘wU€±ŒRQM„ •fR/[±fžÒÌ8G4?Ç$“Ù JÑÀVV9fo§ÎÝvœÀew¼þB.YÙwPÙù¡ ©b!ƒæïÊÏ[`¤Ö©w‹Z¢Ðö£–$½Ëwonn¯—×7o} Òü {¾jŠ–?-°Þ¢Øä ´W“íº¾¹¹âɯécKod@,èì»Ý„¥ Ì ;:˜Å¯A×6v秪¬³MƒCÀù¢ú ŽdbÀM‹ú ñ7Ä¥D“¶:K[#l N¯ÜÀûˆkÐ>⚌#ûˆóÝnã=È:áù‚‘^ã@˜×õn—U›×s²£ŒåJ(ɼú!PèïèéŒÝØ)p‚ܘ$"Hÿ7o¤d" ¨b‘¤ìŒœþ)è‰ÊiõÔ9&+üÈÑâЩ=-^»¥%Ó²šS _ipÖÌ݈0ÜÎG`­9&žÁFáÈW©8Æ»¶Pd GŽ ŠB猬 .Jâ/s‘¸mçO(<â}çP›âÂ.æñ¯‰]ßô'³ï꛹­RÃñÜ0^²›5[ÖPRfCà’˜±6ƒyî£M„Ĭ­ §Ð /Çÿå•ÿ÷¬³0!¦è—c‘£ú'±çÓcS£­B¨ªyÌØnÏpçIð. ˆúD/Eµ?¶è{béý ` !ãjÖà÷Õ†²x¬vyÕò„5IÌF œ]’†`k˯„,s ¢õj“6d'À±=wöÓÂa@wxÖ!}"x“SÌ,[ŽåÛ#í^ååÃç„PA€¯ÂN²ü·s %D»á0˜8w«±H5¶hþ¤íeµôgc[À¦bå°ß€w,ð„`šÁñ¯·Ë]ÑX€ÆÜ½ Ü ðòýû7€½Ýg|M]5$†à%;FX3à €ÿŸK À©ÈÑö2\úfÖ '"ÒQï„g0A–d:]©—¾š‹à6Fæ…ÂF…éØ$´Ùç‡QÄ’·­Ëñ š¦Þ9W”5yó•jù+ÝßCQæ³Qdb¦#ù¦ŸpË4EoªÒ¢ùxÝÐXsØùVœOÏëû3Á‹õö³î—7ùßǼZó'öœ0Jñ¦÷Š‚z‡B „ "ˆ)I†%V.G’ñýhŒ³xÍWiLgðRé$XZÓ1óU©B[È#i »ˆsÊ,MjŽËA±44\ 6®[xlìñGÄPäDLÉ’²Ö¼ú¤L€ƒã¼Ä2 ç9 üŠ'.ñf¤òx#%™îñÖ82âˆÖ.éhh6³¹$¬©÷FkÉc#ÞÎãÛ¦hR«fGÎ<»/幘KGZ:–³&^ eúeÅĵ[& ¯R ¯’‘pÿØÛF‰1N›“é“Ýi^Ÿ-—õ^~]o²Lì²öL¨ËŽ>ŸÐ¯2RWkÞ"œbG6‹4š^ZÎÕDzññÛY²m3—‚oª¯$ í«Ï.2€ì\õ8·´V@‡égI C!ecî³VÀÎI1¢ñ“8p}!1U¼‚ïgvöuxwÒ3÷¯0: ¬™ŸåD¢:ŠœM¹VÝòpñ냯¸\BFò´ø(Òþ p\ úkŽ› ÿYhPi5)]ŒõÔè³gÖ`Lû0ª;2cÿì‘Á…ÉY—ŽÛŒbÕH} ßÎà3§ø’ÏKÀ™Œ,>½ÖËë3äáq»©Ém&º”#L§‘L6\[ÓÒËw lxq°• °»Ç–xÙž¦öy••¬þ22¤Óò©• £)ŽÆ§/åÒGûoÀ½P²Æ Š×Ìú0cAwUT*>S‰0gPlFœo+zf›ÍBxgêÔÀøï·WïdÐˈ)8pÖÿÅ öD|~¿ETóAõ Úå†à¿“æžésú¯“TÄñ$›þùúöíÕ›Óª¦õC¹€TÂ1ù|USg¡ÒðéÚâ E‡}‘g¾•$b}µáùD—È÷٨س}—L,ü\mT%Õ2©o(fájW0u¨I0q¨€X‡ û{cÛäÅWÊB8£İ ›E‹‹Pý…¸z⣘÷=)\Oç{þyNÇ•FLÕÛ¯8‰‘Dk)GÖÒž62ºÓÍŽ õ` /BFÚË3Ì:qÜ·`ÆÖarÝ£Í_p ;¬ŒÕ@’ðh7Np• g¨ñcÜX!°ù;@h0Wh¹ÿ’cSÝv9LÀ”¢u5KÎöqAÁ=›MÞ•멸sŸÑð$ÖÃõãÙ5L¢ÞøbÖžóvT Gö7²²ä~M³­¹ÃCï¶@ˆ+‰ëäQ¿u)%L8±­¸ÄãO"ë8@ˆ], ®ÃD]•<Ôó†3zÆ—AUûÙºØð´«.£—Ê{Úë­ƒéœð9}ïéÅu¶_+¶ 1uO¾ììõ#²U¤4=íýZÈFð$iq5Ô¹â†ÑŽ pŸ ŒÛâѺ϶xgŽ´®«ÖVl0k·BϤ»9o8£š$õ 4gÚ¹ZëÞþÀ²q)]c/¢V †Žõð ¸E ›–®îÆŸØfj},7¼$Ÿ)OaÙKPXß'ó`ŽùJζ¾­É¶­o¤Ðk™W-²(˜x³ô•«‚qËêN~M‘ëf¶S £Â‹²%‰)ÊžhNë‹mrÕ¡h¾ÚhТ9äýN ÝÒ|+Ìöó‘þ5[¤±êäâìxðF›ãÀW èŽ;õ#>˜D(3ˆ$YÅ—dÑ~¦\àÅß49âás[hÆÁª³{% 8- ·AÉ–±¡ÚV_;Ì.†M¤0Œ½›Âv|pEƒõOˆaýYWFhAì«m ÁÑèKvmF *Tââ€qÞÍ~>iÊØA6]'(Ôô°&=g7•°¨C$ÓT¤ F„Ndì¥ÿ#-«þ endstream endobj 74 0 obj << /Length 3239 /Filter /FlateDecode >> stream xÚ•ZmsÛ6þî_¡É}å©`╤oî2N»iL+íeÚû@K´Ä)E*"Çýõ·‹ß$ÒÎ9“!€Àb_Ÿ]èõüäìJê ÷YäG|2¿ŸœQ8 ”d:R“ùrò‡w?•¾—U<“†I¦Ó™µÞûbʵ÷u*´—lî’ô¡ÇåÔ¾ÓÿÎ>y3?ùrÂ'>üãÍ2bRN›“?þëO–0ôóÄgFìÄÍDÃŒÖÐÎ&·'¿ž¼>¦6Š˜À’¾fB‡DmµN¦3)µ—Yê¦Ü÷4ìZÄ¥Ü%eºÜ'%¾)oYPo^Tnb‘Wð |ŸÞM…ïí+÷]åf6»”‹b—àFl:Ó\y?uvE¾wvSí{À©"/½§/c·@ºÊÓ?}_,âÜígзIà¸çŸq†Šè|HZœæ%ñ¸>¤}Y›mfwý–VÔ·KVi³a–‹%†jà[¼sÝåšÖÌéõO_ûñÁnŽ¥vOËRÛZÇ;‰U²ënx•®]yã¬9UÀ"'´9н _Ù•¯àÌðæÚIÛ2Y¹Y=-š’7³vÅ É Z6@‚Ž€J<½»„:öe²¤JŸÛ)÷vÅr¿p3–qßÁáJzE6;jÙ[…ò½GZ´L '_$%¦<¤ÕšZ‡<ÓŽgÈ„™ œÅÊWù}¡¤ù2]ÄUš¯þOqÛ—}Ù|Ø>ÚÄùò|ˆÝ 6ê¿gô—•iYk+vž€ºgÓ“»×/ôü7=ÚO²Áì7¦’IÖâÝ­Ä ó}UÏ)¶0a:S<@mÞgKjÇÙ²/F–=–ØG c¤ز¢ ƒãaPoruq;ÿÏÙç!j”b¦!˜=x*Á‚öTó'VÓàM³í]²ˆ÷¥#ºØW³â~vïtÝ)x4&Ày÷ÜFEsò2‹+Òåû^q_%95WIžÐôuÊçµ²ÍzzVòHÃ(Ú$u_7&à\aÀù3®PAO‘g½½j+Á%+9t€}?3“턞䖡Ä©I=PÓGoµ1×3›iµÑ“!cu‹x½‰Ë¿0$Ë¢—>r†8ÙÅh]¾¿¨7ž ¢æÖL ^Z×ËMOHÖ?Á`š[…*ºÝZׅΆ||éI½¯­þÙAܰQí’zyãÅŽ†Ö³ÀËg ßFÅG œo Õ1ùa7–Ù)Þ¹Vi” ¸€[,-Ý9½×F}iÞî<`[ÚAÐÄwñ_É}š%ƒ¦ªYÈ3üah5øE!ä~.A²7o_ãí‡LŠp¢µ€%ÅSÈF2%Í®ém©9€$p!¸–á’¶¾ùqÐóq¦´j@|)\xŠqôL’ÇVx™ [ˆ8.œ}mÂEÕS¬B[xгtk(Lƒ©Lž‚)Îó*Š ÿŒâÀ¾ÖkΧ\ÔZRû,Üß÷ª.ù¾7Ão0ê7iÀì-ð^Õéu]uÏcÓCö ·cÔ‘·ÁX_a=“W¹ùR¹÷úœ·ë; ØJ3JCBzȲ™³oßgÜȾnÕÎ7â#,€ÌËZnžÀìð8ji(½×5Á @\´ÑÚuÄ›»tµ'8z0>Ä °Öy3ƒ³–”E±,r´Ýh à uÀ)†vÖšq<»5À,Ðeú,ƒˆèìD#ܧÍDƒY5‡ÚÄÕbpEЃ@†Ï««àÏNÎDKÛˆÔû+¡rW”´x›4·fêRâ,syÁ ,v"\Á1̰©F¸#a ÿ0d¡L…pêx¹L]h’´ {sz¦€bÒEZ¹NBßXur ÷9=²:?R2£hŸ[ÁQF;sD÷4e¾ŽqûH£ ;PE^/Ö¤Â-~ƒ9-Jµ_8ò-á=É—%}4ªʰ0jäw:˜N°@]¼ä<¬S¢GÓ·3k=Ä»«$K˜éÎ~UðÒ°žÐÂl]#s `w GÞºâŠÍ5p³*]Ð\·.©€Ç!,PÐD@ÿùÊ-åÖ B ޶@çØ84/“&[ŠÜ"‡g|.÷pu“û¦é¤t’Š.bê”DöåH½ü¹p ”_?e1àŸµÒOÇr†,ÒÁ(›7(+Ôe©ò`ïJ~&$Ã3(H-–€ÙŒ8Å@TfËbWžá^uá¥)¡$Köý÷ÓHqšÈ6A¿ •tJ¬D¯ª„”U‘OÃÞ6±„Ž®V¡¡@Fú6ws¯h7(ê²dA¥$쎩<Ù™[ú²í:¾KºàPø}ຶX$2M>†m‹\?¨{±{ãÓX.%Ó·t@8×óÍMi¾‰«A#  Uã®Ï/5ìÁçO&vX{kbÌüüDZeš²ÒnÑ1¿­Q~z~ª(8^`@Áv\Ž o@¢/‚ëókçä XR 5ù´#0œÈ@ûºûõ»ýÀeá‚~š/»Ér½¿ÿÓ÷emD®Ú-?}’þouéy›,l-|ÔèB§’ EMøo®ÞXíùu3ü[ÜáÞЦò¢rß+KØgµFc7Í– á™æ‹l¿´eCx³uòܽ<¤Y†-ÙN^å(m„O¶ø%½4¯wpS:€œ•°.}†‡ÑQí‚[„À=dUÖxÄHzî²Â!aë9#ß[¦å6£ª'U°hœPGÞý.tvÎ:Þ[ácšÓ«}·$رæjbÈj©Jc'/.~üíöôíüãÍÕüÕ‹!¹…~7ùÁ%kƒ’ÛÐ¥i˜õŸ•è3Ú™‹uYÚ×au@uXmZ´× j0@†-´—AA®à7¹=ýžª× wç²ñ¹W¯FWéæù¼Od`­{Öéj Ʊv‡?:¨éÖ9qÜV˜;s$Û¢ÐçjªÈP{™«/€ù:yCg %䙤ñF¦”fä&B´&Ð¥vÎŒbA(ZÈ÷å,_U%‹ã¡õ!ç‘iSóÍ6¦Ö!–‡¼7’Ýå7«²Úð‘ ‚ÝxѼo«eGó]õ²MöÙ=fxeº—ˆxXºk2íO9£u“[Ñb€À__‘ŸNg!ÞYpÿÕ+ÚB,<Õõ‚Ïîêçö´F!çí_sÓxô…£‡ƒ®zï>¼#’~ûx}3ÿéÃÛïnn:$}ž¿»¾¼øpyuùñö×ßoÞ¿ùåê—›ë›Ë«ïoì€T 8”ÞÜ¿"€Q7dÝPuC× ã`êu»7…t…ÒÝô_ÑÝ> stream xÚ­XëoÛ6ÿž¿Bû¹˜9¾D‰éP,Áš ’¦‹Û/][02 “%Ç’Óè¿ãC’å0­Eàðu:ï~¼Of?²$"I,I4[D)A©Ì¢”3”HÍæÑûx1a8VM«¦L †²b2¥Y"h|^OHßNhëÕ•ÞÀ|šÅ„ýè:S:ù0{uðrvps@" ¤ßIÄX”¯ÞÀÑ–^E1Xùl W‰$~]¼981Ò&8Ê‚a¥D8Ž8A4Éœ°ÏŽÖËºßæK©Ú¢®ŒÀcj™HGôË‘ÊÛâVO¦ ÈÞ­Q}<º*ªyQ]ÉöU_Q¤ô_Í–À–Q«ªª['Œyœ/ÕfB@“ykTeHŠÆµ¥^´®W/qÛq9<:u2– SsýÆ´*:Öwãžö ×ËM¦<ÃV:w¶{&8ܘȞÁŠŽæzÑ„,0Ê:J#Ié´7å4A˜L €‡{uäªrhPeS»Þ•vm³Öyaè¹_˜Pñ‹ºm­êÍ  KMRŠî¥>=¾‹6š` §`"òÞâLŒÑ6ÞŽf)à̲J%u{ŸŸ¿žÝÝ–’”}—mÅ9Úö×—§!Ë%…Ãz}èÊèó¶ØÔÕJW­S¥½­ÊãBY—Þm=hÛv¼qm¿R+ýÜÙ™r‚HÂÀÎÆÞ´B‚)ü#@N¨ãmQååv®Ý ^ȪÒvï‡ûÝ@.ã?ŒO1}t‚¦—JíŽ:}çîèáÏ ­ÚíF7Ȳ? i‰øìÕäw«7NŒ&÷ÊY·O#Å(w¤ø¡—b]E˜2‹K1v8ÖÑ9qY\9waÆöZ˜ÙAiM71ê‡qDSyG²›GE#8DöšÉt³Õ÷Jct4™¦˜[(\Ö+íhš¥.K/ìFO¥„Œ³-6þžƒuva e½DU輀Ĥ·èîƒ,C)M;jäPˤŒ/‹UQ…S)„Mk¯tîZÄÌj£ Öªj’aj !†É} .+¸‡Þ™>&¶@”õÞng·« ¦uÓ[øheà6FšVת¨r2ˆS®iõj]ï#æ;'`úy]µð¥õËö›¥_(‹Ž› `Ð.!è¸^“×^Òî³FªÜ«ò\7G´Ý0Á=ãÖ©· Åç+íÁ©~kÓ´]”Q¹6&öYÉø6ò É9âØ§Íúë–<ËûúÛåìŒ|úýíÙñyH }ƒÁÐÌ“ò‡I“?³—WúéâõùñIˆ!ôÄ„#„-ÂøÉÐJíu A |ÑlåzëM=ß‚½ÜH™†ô1SÆþvi×QÙ…ªãU7ž¶ÃAã>O1€¤ßÒXˆirœTôN \ÚJµG¡óïiéE3Ò«z‡ãºn|>eÜd©®t麷ªÜêÐCZ~Àvbžê´?ˆE¦ºZ­K}ô8:_üxRæó,´È\ä,"ÜêÇàjêûØ–ŒàÑlD´sÔ§^/:bwñ?Äc‰ÞwÁÙSˆäˆè4¬2"ú#L4>ÖYˆèÅ÷ó,ÙN)c}¨ZùÞÞÍs“6ò@»mºL~±‹ëû²÷ÄÔw÷§pfpeÉ^ b—]@€‡ltœ Þç&)bYïùÞ…vƒBuðÞ50*}ÕåëU>‡QÂã¢õ«P:æªÕž¨]*¿à‹3¯$wÖ1Cå†ãT½jÝ"8ñb¾õ_˜ìÏv†Zªß¯#)}ÎÅû‰€­Da— <µ«ãá#‘ìl"¸uÉfÒ±„‰N0g·,çù ÈüfË­÷å!MC™Nxo5{•'ÊdD8F"M¾­rbfHÏ /­Ý·÷ûffPL…­[Í —ÊVQ½r8˜'”€BN9Ôga¥˜õ%vëØǰ¦^‘o«²øÛìëƒ c&ð±ñVõÜš<÷EÇÌÞ9ÓÚ÷ /3ÇÔ=^¸•qÎnÂ.ã¬ZƒÆ¬Jlg©ªkÏØ‚ÂLI•cáÚ.ŒïùŸp*=°°ùìÂç³z]ªÜ½ì¦ã N]Á+ÊÎ{ S™ÆŸán’xé=Ÿ»GßûDYAÞ3¼u5¡#¹ÛÁ„Íw½7š&$Û¹à°bYo[G{Ÿk„Z…üºò¾ÚM&ˆáPç÷îe\nW*XGA6!)ݽ£ä$xY2„iŸ]<lbNêzó«Î (KE2ÖÜåùÅѦá\f‰0Y??CÖÛr,®+×…¢,¨¯ ’Ät$và-(ö†K2ð0ßö„æ™a%øã~%£lV ¾À!Áz¢ ÊÈ‚Ì8bb—qzéÝ…ÓÒÒ†’Œ÷ÅTèé"ÂïÊaŒß•R„ezçI ËÌFîm§7À¡ñ&O"rÏäC¦Ð=:™z±4•n8/.> stream xÚÝY[oÛÆ~÷¯PŠHAµÙ+¹ë Åq;I}©zz%®,¢$¥TTýñ½"%ÚM[ã =.w‡³sýfFy9=zvÆÄ€`¤°"ƒéb*99CBñÁ4|?\ŒFeY€’ÉhL¥èðj5"bøqDÅPg3]À~(‡„}áS:úqúõÑéôèÃ`øCš˜BŒ æÙÑ÷?âA G_0bp²µ„Ù€ „€u:˜}sôÒH+ð@"Ü«Â!pÄQ!°Ó¥H4ÓeåVå|UèÒ­£BÆ s®†«µ'˜%•?>ý Làb‡«ÇÆ6B9Þåú·k¬¸”ˆýöz2½$?¿ùöòäÊ}ú:ÝTQµLV¹`2®Š(/ºˆJ¿u¹qOòÜ3™ºÅ›—^ÔÍl“ƒ} ˆ14²¸mJFd(­Xî{®ü c)¿D¡«°œ¤ˆ7Ê—_þDª”•šéÍ5¶ä(ÄaמIžTùñ¾Jf—삳:{ÖBÿ[ßÖa éŒOl´óïñ¡ÑÆ="N²¤ZŽßG•.²(oÅSKoˆFò¹W!Öy•TwîÍÞ‰1Âþ´L²$Š;“¼vsc6¯ôGH*2L£u‹xVÛÛqÚv7BÈn 7¦^!FB0 B]6+U¯(nV;£t˜x«ÜVùyédúîÕÍÅ«‹7ïÞž^_}uñêäìúêâüÕÙÛÉ»³Ó×§ço''ß]žOàõâúÝõÍÙôüòäæýë«sË_*Ä™ê²ÿ|(ư°"ôѸ€>áüSD˜tDèÓðOšiF«QŽ8ö¦¡ä1òß°ö7Œ!HPð¥%ß8Ýž|¶ÐQµ)4Z§Oú®RAóY9PN ¶™«ª•¿2ÏWäÚï.ý‚w俉rÀAX|±G¥ÉmžAH»×™ž¯2 Ùe¥é ò˜P‰xÅÕÿ&{W·àr’´áXàŽ%"Ƙ@/Xä¿o¢ÂD€¶s²«çˆïéó>»w°»Ñ¿ƒÝÍn »í^/vƒ1Â>ì¶íÅî;È-?¹Ao½68?"tC”ŸÝm³öB·úgB÷^X߇Èó½ÚÛðdñZáæadRž÷[ð"¥ÐäÆqRAâ¹7 ð,tæÝ$¿5;Ä#£!ÙŽzº8YØVY:Ÿp³,ËšI™Ä›z’Ëç±c Øed¸]&ó¥;]«xãY¨î[ ÑX‡´é¼ÎH¹ó(2î@Û° Dê<Ý”N98^-ÜÓ©‹ýJàvÓdVͨvçvKýact4o¦<”+·Ÿd ñn&(÷®pœF ÃÖóqéäëÑʦ,P+nme=ÊIÛ£‚ ªºž:ªÚ$P“$©)L&Öé·q)šìL’n´Q žäNm<ýk”­S/]·ò†­=už0Œ¨äõ-YRΟmÖ‡ƒ’>†ðTH€>ŒJ ú£ ;(íõœ"L¸å'n¬ƒ¾¢„®¢Ï\ IdËbÄéT-£ª­e0Îzunʵó’m4 ÐüÆ¢Xe¨Áø€t¹¦"36¾+?¤î5ŽªhfËy³Á ÏoóÌ·!.×loTºÄ?ë „ŒˆQTqN}¾?F©‹LFYKhwÐq¦!Øe¢9N“Ü-´4·Iž[d0'[Ûã™Õ“O ó3FÓ¹#6æZêÒ_Úp¡¦òÑ/&?´—#*kùÆ}Õb'´µ™þcš'Îö»>®É²v?hTï ÎÆsÚ¤€µ Šõ¢ì‹’¢ó]”`šêZ”Æ‚3û.rÖ‚†:£8‡îpÓßKR A ßé%_<=^/W%ü-îR§|a^üç"2ù¨ë²]é™/Y/~:ž%yl½×KçÙÝÛ°õÐRæx=í;dò ÜéO½§¡g짆~ÉîMû|Š»•q›¤i“T&öFƒ2ÊtgÀhEc+‰<²òÁø£"@g"þÄ^üÙÀ²pÃH`'*&f>õ';¡Œ$„ºŒ€çNAxé¢ñj&?]e€¬š™·Ô™fÐr¼G7ô Z£šâY/þB×Û!N =¯V» L,0ôÜ $¢Jî_ºVC$…jDÀ¯º%XJË‹‘VuyzOy’-xã8ï.0¨´[Ýe¶O÷ªdc³ívÛw1Qˆ«±Úþ²‹ÜD³Î¥nQßu’¢]˜>hiÀqD!L Ûþ^§²ƒXV¦î,Ýs­àpÝã\ qÅñÞµ½-KˆÁuìQî RÐÖuî¯Òû:ðnáFÜ›ØÆú§åІò1T˜Ûæ«£Êze=·ÒäQ.…\Ä<8°ß=æs W¡èf_l+ö6OWQlеCyhbš^ ¶’ÜvbŸ g²ÖÉÂôaÐÙÙ—¦w3/Ìx8¼vÿ·àIì0¥gî¨Ôð>&¦írIÉa©µ6µÝöéÝÈŒ‚ÐJÁºhÑ&„S'æ®1õ¾ï¸Zù!DvÓFƒPb+C(º/¶­åÃË»É7n§ÝÒŠº“6”e¹š'‘é ]#+Z[á¬k˜¬²(Éý&@¡i(ÝK©]‹8† ªì!-G6ãô”nN4ÕR~²4£J4;›ù°4í¾éÍhPÿd $ÿ d§Uærœ»E³nkí蚦.”ü­é°Õ:Ï™ßKŒD)¤$ô~æ÷ŸÀ×nŠëŒùg€›¦ endstream endobj 84 0 obj << /Length 3162 /Filter /FlateDecode >> stream xÚ­ZmoÛÈþî_! 8€Fà ÷•dÒ÷.×»ž´q¹  EZ"Ž"u"ÇÅýøÎì,)RZÙjcøƒ–û2;;;/ÏÌúâúìå[©gì S&ål¾:ûø)šå0ôÓ,bFîíÄÕLÃŒÖЮfïÏþ~vqÈmš²(’‘fB'Äm‘Í—È`4ÝÒò”$Á/‘Žî—å0r×5,³õº¨[ê/kú}GG^Ñ”¬Î©ûŸuùnÓt@Œ¿†žToÏ“(xóþúœ ø¥éVH†Vä¥[Z7¶Ûõº®TtŽ™7!Ê Nr¿JéD°XÖ‹óPFQ7«¬~a C*ið~äà³\wxŒ4 ºeÖÑìyVS×zÓäÛyA½ãíRÏ´,«ñ¬+”.³s8)­=¼[•J©xfRw”lw\#ÕT‡®—Ûö•wS„éµó ªÑK`þðv9ÜnœÂŸ‘¯¹]žÆL)ÃiïõÜÁ¦BD,æY6B1aÄd×ûû{ϦJ0.ùólª4Ó&žlZ°5(˜- Ãl>§f»þý’ZËßßüüã”I {égaJ¦‚%1Ÿ0õ¯ïÑ‘yt TĘAלIøµ L3“C!˜æÎؾíßÃN½§só”æ`SઃÐýšD¢•Å:x÷6âZ)Õ+îó“ÆÄ{Ëã4=¾|ÿ˜¡PS¶?,ËÊo¨ íHŸl3‘‘3 7ÉW𠏱4µ¤Tò¤ÑDàIžaW!@Â` “] \ý³l©@Áe<ÝÒk2;y’£gilžƒG¥À¹œòø¸%'ZNXÄ&š ¨7ÅÚµN± Øx-èØòPs&b9e6¼§9ðIB$LÕK⻲]Wb­ŒÚ#s ’àE(ÈfÕ¶ DpDPñ‰UDãéàþä*ÌUD8O¾ß]K`P¶C@ß4ÈÓ—r•uÅcÀ#Ís D°,˰7G /Ú$ë¡“°0Ò G)‹c=½¥†¨¹*ên…mÜ 7E[æ[7!«ÊE½*êÎ@q÷¢vHÂ݈‰žVN „h§¼ ¼­:ï6!úž˜½ûÿpòýÏ›Œ¢F¼ ÷‡—‚Ûq@Ê–ùKAö6peY4Ô_t†÷xÕÔm !òÆA†ÿ¤œ r´ÏÅ9çÁæœcàv¬Ê_Q4þ€¦£A ï0Y’Æw~Ì«’n9•8«œä:Ö¶-²Í|é§ ­wî0ʰ…ÀµÌ{%Êóu3«è»-~ÛõÜŽîÅñqžLÃexC÷^|ä*/rO0”ÚZ¢R`‘‚]4”û·´„cìUòÔ2ì䃙7A¼u™+|[s1ÑÅoŠêú·m‘»½AãG†oéXáÞ»)5-ç5¤JYYeÖ°*·"s$œI^ãü±!N­©† eäÄ~ã3Ü`s€(£ŒÝʶ[o]ÛÙ»g7 ºJvyUÙñ§Ñ¡sƒHíw°+ÒªÕ¢Û²*;ça('ÂVŸI¿{íx¼m›ªè òÕ>apƒ ‘Ä€P\­âæâiiü%«æÛʺv«`]ÌÁ`vMä Z‘8¾»àA?§-WpÎÁO§ÚJÒü -Ù¶”"ˆõóØw$Æ0n¿VM^T/l|ˆr=1}Wº"u3¯¶e¨gŒœÚ.P å4†Ì¯t³ª"EußCëâ/ta(£Ö ·tˆ9ö›î [ ‰EáÃÀVKE’®Á_H•›æWêYYóÕèŸWM lh+F‘&»dÜŽf`~=%$Ó‰|-å>fŽvË7Íšz†½…ñk÷nð0+ƒœË#Öæ ý»}ZÿÐ0ÞmìE~.›m[yÍ` –„~µÀ­‡`Ê(Ö)žï—½GÂ/R9hüÇ¡Wöн§£:MÍê½E·e׃ü,÷Ç«²E-¶¬Ô6o Û ÃviKÀÇ@´Ðrª&(Œ‰¿ÛGûâ påÔ3q)·Ù/÷×{œ”mr£9î@înqÚÝ-JOh`Ã]H˜ŽéñІù‘ª&—‚E"Z®pWÖlG…7jLü„ß8W4û¼‘LøAqX… ò=ÒðiMÏv›Ü£›I8mçvªþ¬Õ1î%õí¢ü ©´¯ @Ä5À—#ö­¶È" ×[Ü+§¶ZÉcðÀô{·iVÔ"~¡Aš‰- á×¹7h¡Z‡¡‡€Zú$Aacçj$·±Ô§W§@L܆s…~•Ôl@098o.˜`ñkÏbHý”F´„¿C6­ƒ‚3œóQæ…¨6gG°T§fòãÓfrÙäåÝ•V7ͶÎ)þ)í°¶¬'__m¤T»ürÒ»rmçøÐaìq ¨Û­uWJ;liá±ð:\<æšåž] ë4°*[È mø‚/‚Р?4Zç~k·ÊQÆT5ú†ÚtN0YˆÒR‰àÔ†0†¹Ò-!4øÂ_‘°oDUB{Ę?=fDýD½ˆ¢ˆÚ»|æYvázîQ{šm•Óì[G~|,¤ÛÒìáXÐ7ëµ'îÀ^Àd8 ý(&ï?ÒÙ‰X'Ö$HS–~ãì¤z’ÃoNsø^KgFÊS>¬Äíò2¥˜ þâc÷ I}üòòᓟ\¢ƒëÀ\£üD\‘h¹Ó࡚“…¤D±d‹ÑW5mÛÜÝQà >®x«ÐŽ¢ñã…×IòñIûò PŸ#|]ŒÐš™ýRJe_]~87ŽQ „Ÿ`À]KÇs .ð…qœù³KiÓõ1¯Ž´…7…-÷9>À;Aæý™ÜØ„C|-j­úº‘ù|KÐh> Œp”Ð{Õ§ó¥í¿|Zû¯-Ê3i°Ê¾”„ÚWÔ‘­À­£0 •©ì$ˆÎC:a'ù3``~ì@Œ &qðÒ ¼¼uðpLØÆÜѲTue80ö|¼ó=T;#Ã%MÂ^ãJ£‰©ÄÝ”üE‚€PBO‹0áòâ¡+ܤcîA€ú&;ø~sÉÍ‘r˜Ù½¾õ¦œP) ¶úá„­Œb±‰G[©þ—­"Œé­ØöTmãÌKIH±Ó©¦¡;V5Ùâ~3d·">ö²™û†àöþùÇ ß“EÌT @Zq¦ã¯« ‰íØÒ’±« ]~ù7¯\À$ÌÀ[Q[•-7MŸ¾ÃIAœ†ŽÔXÄG/}œ‰Ì£G– –TÉg9²LaAœùÏ~m°a‰µÑ®°Ô±OÔãì,¤%lŠÞÿF1ð¹§ «Ñ#9Aʺ>õØ޲Ï*æô† >]nxRÿE€ò¶Šg‘‹C ý`ÚWVEØ•+·Ý> …ž1.üîòÍÿÒ$±é]$ÄWþCh¸€[CP¿»"á)ŠI#Ç7ô¢߇T“Ç{Åᢛ}A?½±èÈ')ÂÛjíé»›Iÿñ‚ÿËó£!ÃO.˜\½¼¹9rþ‘†¾©:[©®„c˜¥ºÌ >é%ÀW¯®¨u廫7ý€v~ܼºÙÍXoš®(ëݬi­Kß4èØÖ ·á³”}™ƒGᇜ¬{™L¹«ÔűUzœ³÷èqôÿE¸¦ÿŒq"z ý¯$ƒ©£×ÇFÍñ놠sQÓÉOº3‹^\ÂÚþ0Û¾ž¨]½1 "1$’¼a¸ãS­D›ÿ¢Ù ÷O;ÖŒÓnøì1•²HÝÃÚU=ìg]ŒüÖ1De¢þ½¹zï b ƒ¼İdœé_ýñÿ¤`%…ø!Aô/в‰¥|ƉZðÞý/˜ÓÝ endstream endobj 87 0 obj << /Length 2874 /Filter /FlateDecode >> stream xÚ­ZKoÛH¾ûWè(aE†ý$™Å“ “Ef°FñÁØ$Zj[Ü¡HHí`üVuuó•–í >°»Ù¬®®ÇWùíÕÅ«÷B-XçIÎW·‹”Åiž-R)b•ËÅÕvñyy»ɲh»":qV®"ž)Í——ÍŠ©åŸ+®–fcްžfK&Ö4à 端W¿^üruñÇ[$ðÇúD ±Øì/>M[xõë"‰¼¹·÷ ©u¬•‚qµøtñ¯‹·–[1æ–q')ÐLTÌUFìF××ÃcçWã*V¹°»º£):àSŠååëKõ–ׯ¯ÝJUÞÕ{Sw­›»çÎE[î˪8ÂPÒ"^[%Kƒâ"¡Ôô¢Û5§»Žå²[±åΔGšõôic»iŽÆu4x‹EäøŽ¨DæÄ}m¤CPx´ÖËû=R‹å¦¨6§ öÔw¸À—sÜÐ9ðÖ±¾ŠàÓ²{\±$YÆNfs–ÆJä^hÑõå» h9ý®uˆ’ŠÇT¢§"ø@çúEÜØ+£nCÔq®åˆbtÆtÒTÏMG{ÓÈ/"¡’8©KÑdNàs¹{ÖM•[X/Ao´d®q.5Õ&, Ú„ }ù”Á €!T¥séë‡Ð5™ îK¢’G²æ²9µÕcP#:æIÖ 0L—ÅÒ:²§Ë€q‘.?̦¼}ÄINbhõ`ê¢êÜê xSÐÚ¾è6;ZéZ*êo,ãワC¼fy6¶<ÇâžT¶ÓÇdi,Töìé쌲Þ¸)ªŽ ¦#YœÉ©£7·«H€¬tpðqÅx²|óO˜ñEá¼ø!^E2Ïá½°†Ex€9¼›Ã!öûSknO½pC~‘ð˜‰-oþÄ+|< ºc–Ä,c£K À0À££!N;ˆ´;njâ`Ól›ºu8ÚŒOï_Øï X {Í')úM€ç4™~¹"b"üÞ[¶ÖþP앃ÕÐ1/R ñðS²ŽXè8‰ õ2ñàŽ‡†í #—=!j„°(‰ïmÚ™§¥ÙÒ>;‹xġCꦋ‚A EÏÂiI&è™–"ö ìx |ü¿ÁzÝ „Çça'&ÜQˆ;¦#û$¯’|y_n» ­ÇßÝX8À%ð-­õ°„“ : Êdsè È~C+2[Êp¯3X‰—÷ƒ." ¹K§²=›Î”5F î¡ ¿w§ÃOÜ a'¬º{à°t_€tч“`UϨޗþ+K–½€¬àô¼Y=Òxk(U’=WAÄO B–€SZ`Ò»ÔoçèÈ~KP<`6Ù\8â¯çMÕµ›Ý©ŠþQ¶;Z:‘ËyßÏ)xo “B­+¹üÌ¿yM§ü;ÕIwôÊOfPõ‹)¯xPg-småê}_<:¤³»¬ãn”ï‹õ4ÖCzó´«©XgýÖ¶£»wæî‰"GÊX$üÈŸ+ a˜²—9À”žõN'+²0r§YHry6-A¥»fë±Ð†¿šžw¦v¾_I°\Xƒ’W±Y\clÍøšÉ5SkÌÙÇAÑ[™wGÌϵ/;ô4ÐᡘÚ#®QX±Ûw§[ˆGÂæKñüP·‹JÈè ›¹Š  # ^.YbÙòjW:"EÞ]½² ©{_]o6'o8´ÒßÂí°å#2â¤lŠã‚Òx‰þE‹ý7Yìöæû®0Kd'|!ˆHñ§úÂX–ê'»Â‰e–‡"Ñ ë› ;ƒ»y­élírkðÛkÃYëJ:œ1²ññæmÑ7Eëf(:|Þ¸¹«áCjÔâÚ´x„jA ûõI5,þ‚Ù&f–>A€"|j •«ÓP\BµùÁÖ²4&ÙœhB~B•¬MMñ1bfTâj©$ñßyÓrI»N¨ú³I;~e“„Så(÷ž`gVðÜÒZ÷fç³KÎ `tÁIOÔ›¶ÇÔÞN7MÝ‘0» *ƒñÒåÆ~C³^CHݳd‘ƒKY‡3q ¤C-(WšAç‘,‹!›:x¾uâÀªn+Šx€¾M?nqòhÜ¢‹k÷x=[Êq‹êè[÷呞d.´Çõ ftŸ¢êÔ¶-`ª‘§2îW­û”–Pë¡[•g[é€áÖ§Ät»‡OÕöúƒ&3Ô`x,.гtûËYÙ‡ÒT¸èÐKrüEäÚåJ„;Â÷»`€?&M÷H3ÊÖÄò¦± Ĩ{€¿ê©YWÐY 8Oæ¼l³séÄÆ1ôS†O°ê±Ã5µo °býûñ`^‡‘`¿1δœ*ŒŠž{z"#vÞÒóíGÍÝJAO¯?9'ÍÙiWáš”#󡆸uœD,Äs5 ³½â &0Ùö!m…&Á;)iÁ ¼ ò³1[C¯¬úq€m¤Êk O2[OðË>žà¦ÿ8‚ Z*wôä&çc8óo­Ýä DÈ& ÐaOpámb”‹W.÷·Çu ÏTœ)Äõáù.ñzD ]§ £oTVUÿzèÕBOÀ‹ÓþÌ7ˆÓÞž˜ƒïB¾jM‰ƒ.ŽÛ­MÎæ½_eÉòͧ+ú(Èe!-© !ã¹eogŸ» &ù!ô’*Ã=Ÿ®Þ}¸<“Wi¡G¿µ QbÚ%”mÿ럽^á+䈨YŸªí¶>¾ûZíÔW[þWÔP†JP(ᆷNCòœÕÏ¡0òÌØ»àöOÁf#d¤C[ùçýF%¥ \AÌ‹D¼ThFÞ…ðçiÄcfÿ¥Ç~ÍU”*š¼jAB¯Úû²m±L q7$ö#ð›#tá?œM[nû¬Íö”…1¤³Þ#û;„ûU™bcÌt6íR§ÌPûNÅ,ïÏxÁÅ3Ãl’·¡‰¦±JÓE¤ñG—e ÿôò?¢óÜÛ endstream endobj 90 0 obj << /Length 4205 /Filter /FlateDecode >> stream xÚÍ[[oÜȱ~÷¯’dx(ö•ä&²Þµ7NÖ[A°»8àÌPár2䬬üúóUWó6nJÚHz˜¾±ººîUÝzuùââ2g"޲8g—Wg‰ˆ’,=K´ŠL¦Ï.7g?.®ÎU¼È›6_*©(-Ï—25V.~¨Ï…Yür.͢حŠÆ“t!ÔKnÈXÊóŸ/ÿúâõ勽g1þD¿ƒÊ"¥ÎÖ»?þŸm0õ׳8R˜¹u wgÚÚȃööìã‹ÿ~ñÊakCØÆ&’&ele„ÎùRÄq¼x]ëxñKy8—ñ¢®vEÕ2j¿Ð@~(óÕ¹ˆÛ¢!V2>–ÕLbq†ˆ¥ÓHhÕ­,xßòàEÎQFÇ6JœRÆá–C, C$Œ’„‘EÔa‰ßf_¬Ë«;?xãg·õ:÷âƒ^}5L"’,&éл‚.oËU3sÔt 7y›¯òÆo¹)šµÇt?lýSK ŒÑ(´5è+¢8Á©M”fé#( ³ô”ü üÍ"+å£3çhICá— ¢äèIžÔ#zN¦ý)ý`Þr Öæeõ¬²i§p@í©KÞô\,öK–!M¤b3•B­!"¿œ²<ÆÊC“_ìædãnO§fž™¸)<[›b=¤W«MY]ß‘‰Òfy/l”©ÖƒO_ºÕ°±>³qØñ{œ‚Š´²'.aº)Ú”2žzï^¿û[ÐÄY,Í&²Ï–.>:Ãvê–&‹]þ¹dƒ·ã™|W+¿Êi~wÅ®”2ß½ºk™F É©uê-=êMT^nGSÎïDêXhl ¯ÜÊ¢æÉêHâœ9rnâ_Ç’7ܲI´Î$h0°#ÏòÞý6HDIͱŸ°vÁÒeõ"_b–”¥‚¿xuÇo Ž.ŽÛöeP†à†â¸wCò»W3¾*6½Gs®°çH ´œœc‰’Ë•ó kîš¶Øùo‰PA|tYÕ[È 8k›Fl2ܳ'‰³†³¶Z–ŽR1ˆóŸäwAsB  rÿ!l=î¥aŠ.5,§NNyg¬öd#ûáÉ6çBVàÃë7óVÀX!º|+@ ”U¼é?>|:©H"‘ÊA~GæJt+>~øæ/ä ™žy äá……}e½v íÈ2}?þ‘.ÛÏ¿”)¤P~¿ª®AŒ•œØ`c—7… À‡–Jx…Éù‹Í‘¿ùßÛÛ[y¢FjÐLÇä[‹8‚tËÂv RpÀ¨4ÒV?MÕÒ,’°NKZóªY5u2$‚MS¯Ë¼u‚†þmÙÞpk.‘SvP^Wí¡ø÷ùÒ`ý÷uý)œŠ%vìb‰§A³OIHXϵñäóO#…§´û×ïA"²¶ý‰¿+ªâo½"jƒeaô›ŠeS䤦!=„Âé.QA r»9s©±^f˜ûŒ¼Ì=Ìf&ÌÓd0£Jˆq°a0—äf¦dTZΑQC"†<é}^nK²ªÆEý±‹’U)ÆDCàf”]¼­xÇ"_û½×”!rBTå4ˆpâzDëWÕp©³! xÔöuµ¡LÊrŒL¿9ÿ°Í¦¨ò’[} €:žhíë†r)N܈ÏÑ\*ã`‡)…`a@OÙß“c„0Úô6 ‘yH½üYO¸ßm7A. lfFÆ0îc}±âLcU|âàŽ–ûÒw]j9Ðè÷ßü>˜~+•DF¦§´>”U{Eû:øa¥±C̳η[쓘!'Q‰Òé5OÎøäÙÈPőβ{½LàF³y|‚ø×>-.IÈØ+ËŠä^{IÛ{oÄ ‘¥gj#4<Bdi”%½TÁå·"‘Pà®#‘$‹Ö ¢Õq½-ê–‡ÿ=5v·¤8YÝòJ¨aNÓÃëç#æ*Ý)•2NÄ0€øc(_ ßº‚¯Yì¸K$hïöåš+Ÿôáœ$§;Ä|×匮‰A˜¯õ€÷STÞÂ>:ÕŽ½O‘&e$H,¬Ø¦÷KS kú`˜.¢ôA÷-ÒȨìY ±a–˜/0çwÌaCfN Uïn6« _l¨¾7Ý‚ëQý ’º» ò§c * ‚“HadîÅh©-É“¨w½›+œ¡Î£»ÊÿCÄÀ•¬‡Ò4ÿ1ÁGP®>?Š+`í:êL º3rÌ86’m~†HGd›ÅS €êý£êQ÷ †=¥îQ«‚’/ôI⪹"áÍegJXø½êº½ç†5l ‘í§igéyÓìabÍC‚é‡'ÑvBsÎ, !~ºñíU}¬6CwÙµ/j»…¼Ê‘$ÿT2ª[bUs\-ÒÐrŽÔ»¸ÄI(Ùç9_—<ò^‰ßËÕÖSèr%~ĭН}ó9Ñðµ´œ§ qF‘î\ÐtÞ*²7EÝÅ ‡¨åÖï’óOUÐð-wÈ]ø‹›Ü—Óʦ+¹WŸhe‡dYÜÕÇvl×.B#²r ¦4ÅG:—ïÞÏÝ´L¢D>KÑ@éË>ß¾ý0—&â¤ê#SäÀýµ–äKÍòŠg6…»“(6¾’"}Ý]v$Áú¶ØíëÓ*¹ì/*¸ãù.=ƒîü§3i¥jG_ò©SñyïõïÄ;#¼pæ3S#̱H'ÔlÖ‡rßFM8Ï… (ß.û¢¦"ìI ö­#²Xä›MIKòª@± kf sëÜr7øí, ³ W·h¶æ”_Ì’)uf²G^RÊ‘çç«9w–ªßùÞ½,9ÕoõçÍ*ªò]ØTŽ« Ã-J'OIæï^3„í,¸ €ƒ‰Ó®ž¶1AýøÐ¹²HZ¯\A-¥‘HzaBøù´ÊƒLášq8‚'¶Ëõ™è'‘s µâY¶U e qœl[D···A¿=H’nw·ž8½Þ7l%³®°4ØÉl±)›ÖK®/xaÇ\sÓ½Þpj‚pjrâ+ʺ ¿âøœïöý4èØ.65¯r»Rãô²¼áaZß í0fFcÖKÏhØw:„=R«Â??9·1 ZWùÏ›¢š>9!€9pKƱ>lB^“+ Ý=6ƒ§$ϱÆê‰Åÿz#þ_¼BOW ¦Þ„ïVF1î?ÿþáÛ˜iLw“ /g‡É*P·O½ÕI©Û£ìN¥BŽ’t5çŸþ‰@_œÙÁ P@˜ŽÞjLi* ï‰üIÕ/\kâºú^Š3À”OÄk¸€ÕF:Ñ/«¹SRaq6Þ¼GáK^Ý™uúe5C£WíêâŸZ;{쨬3°üjîfg¨îü1(ÛàBú \îÝü]ñã¸0ÏÍ‹Õ6è´»Iƒ…6 ÄSKTLI,-Ó.Ÿo‚7;PRÕ“jdøV…grŸûh˜H$'õH2NÆøw3ÚpŠA#ƒí3t³BEHj­ ^6Roîs¢¢ëÔ!°xúu¼<©¬ƒ¢bd¨‚Æ• ß\ ¢rãof }£ë륉cÒŠiâ5Å,Esܶ® N]¤eM[¶G¶iä®,¶›æ«ð#®D#õ¶S®ý±ÃkN"üƒÊô™R1BØì‰wâRæ@)õ€Î®>úïß\¾ç_ÏS‹Õ ¾yõ–[s?Z Ë+¾ho÷]Šæ§'¬Ö«2ª¶»¨*o¢ëúÖ´‹™Ê*•!Ò{ h)@§_bð«¶‘1,˜9½Z0ˆ1ÿQ•ïéQ]Qi+f)A&+–"„ÂUIòÕ¨ÆquÑ3öÂÏ鑦Q–¥'ˆ†µ÷5q¯{ÂÃè)a[€fù::~šb¾ËÐãGcã+Œdšm‚¶±Í¦u›N(]| ¸]|{ÿ®“Ç`®ÆBMà5x…±Â$³ ƒ5.ØN¬Ó…—þ1«M¢X&S©f9qÕB{fhÝ=ZQÄŒˆ‡.»!V/=›ix.ç P±q6t5Ï÷7u.* VÉ3 wM‡GÀ'¸ç¼•K¯Šív¹>2*ˆ\ÝRAõï¡ØPUµ{Nu$›¾gxeÒ¹›Cq>†°ÒÂÈ(AòþT É$PÆŠ‡ï3Dz÷Òß#ºh©’ g;½RšÑc=¢®+‘Q#ß6ô´Á(º•>ŸßֹˀhŒUŠZ^SüÇ•Ÿg §(à!®®Q«)ÛnÛÉ ³îÀm™úzt·u~T?Oƒ™þ"?ø¦³7+rÖ£¿ä‡¶ýK†r}ÜúîŸe,ìjWè·}­¡A+pÕl‰õK¸þ¯öã­×õnßm۸ ÎÕøÉÛX9)À}Vöñ¥À™›zyúÿwa §j"•ík<ü@jÕÝš@ˆªî‘™»bÔïFÏ«y¡¯-‰[N¯Ëö®[ÝýÓ@Ä×RïòÖÝÅð?Ö-k˜û¬ß˜Ð;ÀµO`:u kp}bá»}Ý¥^ú-ýsTM<㎯2eŽ_uSú¾ÀLÞ4Çݾ° P««Ø¤€6¥[´Ù$=Fà]Þö‘¥f®${¢û¦¸ž¹ÏôøiÇIøPе~”æç !Oè)Š~DHFA0¹˜EG"B±rúÞ”¶fò£áLNwäD‹ßYe=›‰õ‡¥{ÏÅÞáˆ5©KW2ëé:Góä¯ÁÑ endstream endobj 94 0 obj << /Length 2965 /Filter /FlateDecode >> stream xÚ­ÛŽÛÆõ}¿Bys­wÅ×YÛe‘²L±¤ÜD21V®?6aÖ¿n¤YÇûâëq²ê $—róù÷w7¿Üˆ‡?"¼ R¦Ô*?Þ|úÌW[ØúaÅ™‚Gx\ik™5ÆÕêöæŸ7ï®cË “&!l+‡Ôã&R)_çÍñ¡*ÿ/e÷„kb}*öeS·ˆj‘¬e~ Ý¡¨ ,ÏjZº/è·Ü×Í©ØÒî¶jᆲއƒ¬.»2«1çÏíý´´à)Œt ÎÎ5,M$áIÆ'Š‘5­t‡¦ßè(É+Ë»ê‰HëªÍŽ-Ýå¶/ZšeÃSYÉ)¬: E¾¹K³üà/q˜Ùó— bïóBO̹̕õ¡a ÂJÅôq_¤‘â(# ²æYßúƒH¸‰pÈËÈï3reÿB§.°˜ùû§ú¿ëYœ‚mhèTiìŽçB‘Äáõ'¯#V1+Õ,²t‡QŠù”˜9‰©XSûu½‚Ä"+…“‘ƒºª¸9 æÞ+LÜÛySw>eqéÉÇ ÌîÔ—³Ì{¼‡,XäÔéTñXÔ©™ÀàÃe†%iL—ý£ï¢fí||q¦u‹¼¥µ¿}|KƒÑy¹i³ë(7‹1XmûÜßqÍÿáÞ¤¸É'É?cÆ'áꆖÊÎÿ¶$Ö€ù(Õ@{‰n†XXy÷Z_•Õž9èÅOËÎî›òž:°pˆ¼!¶‡ìðB•føë5s)úˆ™ * MÈàÆÑu.™½`R¦ÓÛžÂmƒyjŒtÑŒ†iÐp›,Q>ïV ¨à4¢7Ÿ£lc|̾4us,sšúû¶èÚ%t¹ ÔÚXºù]p.áÎOEÖRÞ-ì4ÆݶüŠ,ö3ÈÖ{RaÇäÁŠº…,ýWÒX@·íl ƒ$h‹"0޲šÕbÆ[3#‚yO0ÀÈ LÂl"| ãÃåÀ×$d½‘Óž¬ê=9`v wƒ>k¸^Ïm—/¡jò±ùeŠÑžóEäï6(]‰Jª ãO˜ŒKÎK¨„¶Ò5¨Æ+КÎ)ç"f”"î>–UEë‡ÑŠüÞ²¤áLsñÿ‚Y”*Î\€×ñºn:O<èMù3çðÎo–œâsO–êÆåÌÏ8N¦Ä®4r$õ7E&"=ÓI~7äX\;Ÿ†{˜ôà™#ša裸bpòwŽimœRFW{QÂZ{̪ bŽá.£â ¢lë¯G#«£¥ø±u>Q%£x[š"óCÅ¢’Ô×Ú zÁG´ß {òÐÁpqðxâ½Ká’©òà #É Ù46@û±Ö·×²t8ÉøX/ŸŠ°ö²y¡SÍRi\°¬àí Å´²g͋ٓ¼¨²ÊÝel*Ý¡|½(b p 9gò@mA=¤\kÏK7HrÅè¯)…„"+¹R±MÿRHŽ îÀ»´Oý1[Ô%འ³c ¤ ²t¹IqO„wÅYUHfB™O ¸9—„I›×ÆŸeUŒv3Ó'‹ºêÔ¦Ü’Ø E;í³ºlQûPää —µ)fB‰K¾^ˆ½¢ uCÆ@OÕ„àUžhéÃÝ4€Ø^ &eƘãçkêÞ—{2†?>‹ŸÛrçЇ‚¡s‹Úe \Ö[ð-±1ë·Õ‰×ÙàE!7„PGoó±1ƒgýÓfÝ“½š«†¸ºØ.ƒ:C„¬ì=ÄÍâëV%ioTLÜÓÝŽ3"¶¾©šlK+ýTeëé’3‹0’ـ;\öSÆ0ÉÏ èÚE!ì£[ç€Õ¨"0·Týs‡ N/ÒnÜôk˜ù“cb‰Ë£‘S…ù>UQ{Þú—­/\¥˜ÄCâ8 p>b#¦ZxµÄ1wq×2šº(å¡BÛ7&!K ïípbdõF&íâáráeå_],8‹eümaµ‹Q s!Áã³Ü×!þiïQ†$Žº­]‡Ë}ôJX®bjb0ÁΛÂNdØM‡^ˆ«ÈzAûï±yb(Ñ„"GW5»Qæâ5“cknF<Þ¼›"Gµ. È»¡Ön±ð^DÄÆ ²†àÞíU&sRž co x|ÑœBE©–›PÏÆc›æá2x¯b©Ð+ ÈHÍ ^‚k¦ ƳDÚIôbÛûźFÄSZg-ÏÐ_Àæ” Ë-daXÏz»þîß·ÿþÝÎ{îqÌßHèß–ÒV% >Yµ´eDÌá¯Yp±æ¬dé”ä&QB¹´ëX#ÌÒcìÅò¦¯_Q KÞCøÎêä”:C0ð íöç®l±7h]Éÿ?ª3˜½QâZãò%“8,sÅañÑfg$Þ"š‘÷R8,äœÓ?žšŽ¾¡M檭€û²¦Mß Ðj¸ZKA9·4®Êz:F­;Fû<µÝÈ-N¾¥­piÕä™ïÏ•ɶ·w·ùx .©ß¿TÌiÍpgJYY{W~õ3)ãIú¬,Àm,ËŸ:ëN! ŸÁnŠé7] J<«#bç ~=oeX5v¾–(˜5;Ð,]ãz»£Æ={Ï ¾5%fzå+úšzõc(øÜÐp¨Ú==Wx“D˜L­Ä/um•䣚ˆtÂë³"T2ð@¡åóÛ~Ù"œMð¡Û Ãnß!£œ w91.5»¹á?îÈ ¼3+¯‡‚ú*³ýIÂ3¨1ꎌe#Öþ~g–îÌï!YA¤ƒœp E.Qk¦™Që9ž²4½üH.ÙLq<ÑŠ'ŒìUd’”Ù‘ÿú…¸¸+3ú lFÎD@{ÔÃÇ4ö!ÊÀöì Ã¹Úúe׉·íÂ÷b(!Š6÷Žò¡kNÃ=WXŽÿq$Ño/¢’‘»¿ÊA"eÎ2Ÿs–'å“Ïà]FßhæÐi: éiëR WÑK+ñ?0Á}"#õ=ý€xäV endstream endobj 97 0 obj << /Length 2575 /Filter /FlateDecode >> stream xÚ­YKã6¾÷¯ða¶‘6-¾ô˜ÃíìL2Á¤ƒÝîÅ’d[¶…±%G’Óé`~üV±(êaºÓ‹Yø Š*’ÅbÕW_Ñ˧›Å©'<`IðÉÓvq%ñ$R’éDMž6“Ÿ§Û™ ¦iݤs2Éâ|6±Åô¡œq=ý}&ô4;®² ú£xÊå5D Äì×§nÞ?ÝüvÃ'ü¸[A&LÊÉúxóó¯ÁdŸ~˜L—g#xœ¨0d¡ÖÐ>LoþÙ›"ŽYjG¡™’ü+ÏÇúK(% UHZ¡~zã®VL«¬=ŸÞ¹»*›=µš½•;ä« 'IaV…;M±ÉÕçU5íQâa|°ŸºC—Md6Ö,N"ÚÍÓþ\£  ›]NUt³ÃH0‹˜%bÆnf†àø†Aê‹•˜PF`ô°®OÙ:GõÖiã,–®z±ÜS¦gƒ"{çSüC1¡&sdèïõéËO\s€ùåþ_ßò套<°XÅH&@áWÜD‚…#'(!‚‰X™¹i½äûÿxÿ@v¹_7y1¯²CÚàycש*› _ÄBRƒ1æ³ Ä„b*‡»|F§(ϘQFÑt•á3žžÒª†U8ÚPrz(ËÏà‰$dÀ_Ò‚ž‹Ò €µŽ6n\ÚÐs]ÎG;L‘4Fƒ9'ìíjp^“t·VfõÐ;ï<b<\ò|qCŠ@û9‡øðøA°PÃ:™×5‹DÔJ0Ø`¨Àù3š×£mnéYg¿³"›^ñ°ðÙ´C.ã{7%=‹²¡Æ>‰ umšÁŠ¬ËªÊêSÙî³ío†J¡eæ1€YÑÑh$ùµ•‹Ã^Ü]ÆçŠÅžhÅ™ò«b€óâP˜¹„°¹{>¦Û¬|Ç¡XS·êYÀ2ûAêÝNKbú]‡MIÁ«Ûç ÀNË×ö/EÈ¢ÿ_ö 1¾nÿ}R©vs¶ß³?±0§ÝÞs^×*ìPg;ßz±y‡Ù#ß™Ì2¢$zØ&¯²uSð6u­Ð¿_F€ g„^ŸWeqÌ ›•Ìé¥69¦f\»·P UDL §ìßHF©a8‡Ò…óÖg!Í”v~üôqé›Fl¶R;?p(í }7J¿)=ÖåñèúAÖp° û?úó˜ûG|ˆð[¤½2¤Ü0¤çqW7GÎÒ”^o}Ž- ç ŽHÆCþuÉM@}À±!a&¡9¶Ñ·þ´Æ,ÖÃ=ýǘÂd-讉«DC0G¯‚ð< À®¢˜)Ðó«@LÃ!„ÒÌ%Ú x5ˆaƒRA 7†`Žûª³´ZïmßÞn¶£jјß}9 ÿOŽdå›}ÚÐjë²hR P›±ÉsŠ~©q-9Ê/6Ê=º :nۻܧ GÊâN®Oƒ +¥!ä @i-Œ¿HŒz€ Ii‰* fj‰ ˜þãáÞ"MÌ=N«<«}JÆùTK)–Ù:5'§<¯„M·ÐqH«mÖùŸ¨fF$ÉIllÒ&]¥uÖg©#@@ŽM#žóÃDáÄVê^¨ç¥ˆ‰fõ’z?£H–+‰)9·˜éä¾äJXŠQÞ@w*2j`'m0‹«#Ο?Ìâ`zÿø4ã°ô½ÄN‰úîð¬ˆÚk%gÂï­?c¯ÕRöìaúüö2­˜ ¹m o¾¸ ¶æz&Ãì÷§:¾mª¹ ß>V½uÀ‡qÐàì,^üó‡¼Ëã¸uÈ–u†^Ñ´ÊÒ u‘½ Ñ·H˜d ÝßeÅ*->S'ŸLÇ‹à3ò"¢•ðrÿøÀ8QgàŠãü#!¢ÐÐX~‚O‚íVåÁ&qrï™Ašu$j[VàGW jÊ®&4%'˜šÐ…L,¦iM"¦’ÉLÄÀ[Ûû<ùÇå'ï,èʉì¶å“¡ÎÜÎvª2ó=«¨òèËã 4º-–¦GþÐ'þÈd ¨(V-Ĉ[¨ [WÓ Ý@€¹Î‘âãd#ð˱ìdާtÝ´ó¡Sa \ei\Ex#eBqŽŸ¾]~¤Ö¦Ì¼÷,Æ«„ˆ1úM!ZaG2­ËmC€e}.#ö]uÓ/qì¶*$æ_ȱI¤³‹ úŸËÄ›9U!؇î1è i¹çÙ*ï‡aø]â¤úf1/¾Ä@ô›'\¶fnµ4?ô 7…CýŒ@ÀžXŸºçñ3®:(oN>Ë`¼«Qò&sÉ2€W`Œ.£pY€ë³‡º¤VÏ9kêiZqŒ’*ÛgO¶Òö‘تPŽPÍÚ¢¥heÈù`ÖùZß‹¥-àôÊîPñØôá=Àñ`tM#m j‚ÄX<´uþ…·æ@q£7ù¤aÞAï ½Œ¦&Á³öUM1‹”îì»Å¢X¯rVެÈ÷lWþ¾X¡– ÿÒ<§dwÓâ¥zXáam`¸žj¹ž²\ïCnï|.nB èºz³ ƒW¨Ÿ½Ž»Çô2˜m˜1©ï’ýØâîÔ‚}ÝÞYúE‡·=ƒõ%"^hZ6ûìüoQ62¤üjM™ªzaÛ¾/ y¡¯-ÈR/ÞªÌ7ë÷&²(÷YÆÛ…¦ já¸Ùäöâ–{ÅgO&wa/¶/t|¼ RhJwçˉT>»̼²ïÄ;M oרЂ‚7Iâ¼Å †£û¼å®Mýš…"qA“7}á=ØçáÎÔÛåT$c^¼@ÉcÖìËÖ±xéÈKûÏõ›ÄÏ®$²ôËÇ0CsmZž+ìê¾ p§–Dæ^Ýu=½÷ÿX€ôeª sdðÍ©/†þbce¿žksx‰-“pD6pÍZcU‘}rã,vºÂP©®„·kt̳AR|Çþ:ÚÔ¢Í ;˜Wuä0º¬¼¥½`‘¼¨ƒ¼‹|SŸ¾ñ_®hDÐѹ£qŠØ’ ¾fWütÈ©ðôk‰g¸­ÜÖ·Wr¼Vâ/ö ¹¼{‹[º½òOQ$\ð6vÎ÷[7—nøè{}> stream xÚ­ZmÛ6þ¾¿Â Äb._E1×É^/@Š4‡Cöp4E!ÛòZ¨-¹–ÜMp¸ÿ~CE½˜Z§—ÀDQ#Š|f8óÌÐw÷7·o„š1J 5lv¿iF´IgZ ¢ŒœÝof?Ï· AçYÝdK‘AÒb±ä©Jøü}µ`jþÇ‚«y~Xå'è×霉Øà”óÅ/÷?Þüíþæ÷6£ðcá Â!fëÃÍÏ¿ÐÙý8£DÀ“G'x˜É$!‰RÐÞÏ>Üüãæîr¶iJ4ôhªW)Îö]vzÈaFÎxÿY¹ÁÆñT5yQâÍ&k²UVçµ:ùתm“·"EÝÀ²`•ÅjÁéüÜä~¤l}ªjÿf[„‡Ó‚X{|ð‘R¾‡ñá}²X Ãço¬duÂÇîµOÙá¸Ï­ˆ…ͤóf—[ÔfK–#4\AÒàêÞÿõî­} Hˆ>`+'Už¼Ì-& £i+ÓA!E€ï ».)QñÕÙg»½°ÂKoq/bSbIJ”0Ýœ¥±i FxÄ!ÑÁ8Ñ\öÇ’±±†D$a,À\ðùý‚ê*\Sg§õn¸êz¸¾ƒUáyßV/Ñ¥Î`HBCå(üœUœ3ü2;¸1¡YmñžµC¹49hÔÇ|]ØGμ ÃÍÅJô߉}ø­)p- Í{¸|T ’ˆD´r/ccÁšáÆphH’&Þ9|ÿÝ>¼{{÷ßÛÕ\į›U}ë¢C»Eí/lƧØ5~M@ÄTßhzÏǪ®ï­U„’ @·+”juá7¬2^· ·û©nPl_”yÔ’)8¾N%ߣ |®'£ÀØu+ñJÈ‘D"‚Ä6öE¤ ÁªˆÇÆn˜‡©ÂÎC5_zužhB“™J(ISõ”[DºöúÈf)‘ÇJR¯¼Ö®.6<·Ívv^!«ü¡(Ë¢|@M<Í.¶0‚?4#E ‡(ÂÞíUoAÿûj5Eå-ƒ<ߟ¯æ‡¬A" fI)†&ü‘*zgæ„Æf,ÂÃ&ÝV'm³ŠÍ[*’²àêaXfc ÷S…†u}¶ÅÆ1*M¼¿ÄàÔ ¸ó9Ýûl¸¦˜ 3%ýæFµá <Äð°Và8ånöù©ö‹ªðúϲøtûS¶þû‡ßþ«(7ŽÝ<Ö¸à¼\¶žßªåPq§ª<䥇ËQ̇Ì1€ø/]|ïIíÏyÀ8†#ìøþUÓ«8Êo„cÐXáñ«ó1r ýŒÙ¦^x—ï÷-¤V~ݺ:`ç6…9q3û~wöÌB%ئHÄU$º«íŸÀFNÕ70Ïo«qz¨Æ¢#©Vp[ç¿»<µõû>ËbØ”#”B°²½0Þ9/×±}±B ,œFmoËAÜ(^W~°Sžm°ç±°êõÏ¢,‚%IÓ¡JÛM…¦8Iˆ rxùkâ S ø}áÆ’©éâË$CU fªúa ÇÐÆÞs Þr´§:s¼–ý.½Ý#Zƒù-c a|Ôq^˜Epxž‹V'Ì)1ÄôS‰Iʨ÷¤›PÇP³ú ÉkŸ.{>e‘õ "¯ýÝÊKO¹}ù“[‘gËÁñ¸Æx°´œ" ÷*îÛtXÍz—áX7€š¢íÔí#Ñe)\xñÇ­MœE‚¼6Ùé3ÙvåöþÕ4ºQ2ú¦Ø‹K ]syó\We“µ¶ Áîõzh ˜Ã)’£L~èe<ḜuH“)«ãfÕ¢1¢î¯êÇ¢®mÆú§àºÇH›@ÖÒùë¸)^c_XI<½é÷é&tþZ‡bŸðYCÒ†ód:5³ÐBôóîK'$' ¨¦H$ØPòUN€«P€‹‚¨wpä˜í'ö±-õøéYÖ[#’‡í±)³Ë%HtR‰o²ÉÁ—o/¡œX‚Í^e?æQ6LÚ¡‡Î} Õu.½çö¼¤#››lÎeÖä{Çiè· 'Ô‹Ô|Slöj|ÇWœÔ|}>ÙîvˆKK”v¯–UƒÏ1ÚÞ)s³èÊ8SZåäxÈ2«ÓDQŰ 3®I ý|Ýâž]ƒw3JˆHÉʨ_*ÝyåîÞ½d®†—YûtEÊKHûîÏã ­)<»§"F^‡S‹«hxZ&´6Þ'£YŒ½xÿ8ìö¥XªK,Qs†B/‡\â`ÆÛbgm³ÝXj͵¢½ˆÅã$6%Í•=ÿèªÊÅÆáßrº´×}“#Ï‚MYà ðÉ£}#[ WµÎ9Ãõ!/}E¶ñ¢^zÏžøÊßc‘0ß¼l ±À€}]Cœ=1ð"<Àû¬^ŸŠcCê]lÝ0¬rĠа%ÕówÅo —ˆÃ3“l÷KKO,òOGïÈÇeE4Kf‚j’˜¯+ÓOZ¶ËiÊÄb¥ B…í¸`v|lœs–˜0š.?4}ìÀº¹±&ò`•Šš=`'nycP‰p=×X«7V½È”j:ª¨Ã`›óÚƒŒÕô­CÏÂÃ&?«Q~dû‡uAèxÜ®Ò MÇ ´ñy˜m‰Y s>L÷ŽàQäXÀ± C ¾+1`,Ö:‹›ýˆ,€û“ì«LAQãrNn„snm´ŽÂRŠ”P6J꽇«Går_˜Ìt0ý|½«Ðø]2¹ºí8ã¾Îâ")´õ(±{¢aCÚ€+d?Ëðî#Ä™g¯@¿Nã°>ŸNP#Xt´ ¹±æOj›½Â̸ nè¯ÊŸ^j­ÜXI;ÍÉE NR"«ÀZ¦³7^bûÊö‡ºCª±”‹Ò;ÿöTÝÖh¯[CJ°ž1H&Ú=l?d÷°»–†–½x™ŽJîN …f.C˜½/ÊMqÊ× Þ…•AÛ¦ V²;ÕY°¹-JfM²«xíZåh ½ÙT|ªKtŠ_MU¹Ó>{ö\÷b’Þ¡å ?0]†ÓÖå²™]¶/vs¢ØÈñö°P#ï)¬·µ Z¨É2£Œpªþ„~!•0ãhë¾í—¥0vØo¶ܳ•¿¯/ŠͶl™ß^m…Ó¿ô¹®{k˜Ò d5L‡©?ö<î'¥!r\iž,Ьó|óÅõÆ pÕàùžÇËŸ=bQ^->¿VS©«1Ím =E=¢»—V5^UpÒŽ/¼Öê–î[¾¼êýO!]˜jb˪F‰±p3aÀ¦¶ŽCRááä½pÚæ)QoyäøÝÛ»q§Ž¢Ö©Kå3Ù×hoí.Sݱ´íÑ›%ŠrôÊ– ÿn¶¶(ý–=äØáh‘G‡Ñà¢þnŸF.¢$x_Ú…§0;NºZ{ËÆ¤ÒD)=>£Ü¥Îº=WÓª÷WÝ«A/þ»]ñÚÞõ‹×v ÝÑ–;ÈWôu$€ôœQ_åS`c¶vzÆŸJ*<÷Û~ÆYLìl`TDu¹Ì“ ¤À™Ôeù´;¯´L bó˜)MùC ãÝxË=ÒËH‘‹Ž±£ETwLWíù%ÁCe´+¡Å²ŽÁÙÈÝë$—¸uAjÈ{ÐÞùc ŽÂÈÁ߸X—¸$Î^º Þ:fhí\ôéðGËTؘ÷gëæŒÿÓƒ¿Rø¿á_Ü“OX•¡S 1`½Ú¾×ÄH´_Ûo«ö?)ëýyÓþééÏ`b—ÿPÂhãÿÆ׬¼ü»‘{€'c€7„ót\¯¹(ûvž;ÔWÚ*˧Ö[·uå¾×n]–3è&Ø=8¬8×ù“Ç܈v•­'aM{G|£ô Æÿ|Ì}‚»˜ßÒVBµ/9ó¤eÑÿ©ŸŒ endstream endobj 104 0 obj << /Length 2380 /Filter /FlateDecode >> stream xÚ­koÛ8ò{~…?¨®i’z·¸Å6mxѦnœÞâ°Ý²E'DeÉåmóïoÈ!%K–›Ý½ks8$çÅyQ¹¸;›]yÁˆQ’Єî6£ˆ‘(‰G‘ï‘ ñGwÙè÷ñfâÑqªêtê…Ä#±œLy„||SNX0þsƒ±Ø®Dø(3ï'8å|òÇݯg—wg_ÏØˆÂÖpðây£õöì÷?è(ƒ¥_G”x°òÍlÜŽü0$aœ–gÎ.Œ´Þ¡´IBh$i@x£´JÔ¢øs2 @ª«WË»·ó‹%ÎfJ|ÍÒ:ÉbSÎ6 ÑýJiûFàÌ'‰—gCñ èZ=Ìjø˜é#£©Û4e`*?Á­eeéuĤ¸)À=âû®¬ê®€ÿú_d[¥ Ü—Žl>'œq 8´×x÷ ŠÉÔƒ™¬ªÄÀaDî9Zš\‹ã'`ù°•†ò\XÒ%޲Èä:­EËÐy HYZ‰ÊÃvyW•µv5-2ÞܼB¬µÅÚÑ’«jÂÀGÁ5G¡´_’ÉÔ‚ñ|ƒ6a,",êÝòãá?˜P‡Ù!u„GÄJ…ã— §c±«-ÖPˆZºÖ"6æÜ#!cÎt¤éL}“Ji‰H®ÄýÙYÀ‰î0Ø=jiÊ}…³kQ¬Òâ êïE!KØÕ x‡*Ãl@eÀ•ag·Ç«2{êø»t»MósönàøÖ¬¢ðYGwŒ”Féø3üƒ+ åO¦±¯QÈã³9D„G¼Kƒ{@ÄgpDgÎÀ¥Ì¾7LÝÙ^Õqå﨔 yb¥°h“ÄS?`rðZ7X¥ºŒ>*·'­ž[Ù-Ò.¦8]—»‰K8¾¥î⠀ƛpý0iA‚]¡.44Åm.Ñû‡;blb 8 É£d¼N D­"”È!ÈEf±:#<ÚC;YÜã®Oœû ýƒKeh£‚F¬K¸ïÂACêõÒvßLxwN´zéÙÖ!Míq“TC^³«„u¢ÊµÀ·®%¶0–&¸7–MŒ…Pm# 8±ÆMiªYÌÜ-Æ´¹E@¦ðqÐÆ‡Fi\á}ήP.òLáÌ$R$…mÎ;•æxH óÿbšK"ÞKsX,À[·¢¡‹·r¢x™Pk[gWBÙÚÂ#Bý^b<."< ±Tñ$2ή™T»cÃԻܸl¹š_è”& p¯püø~´U5‹íKÍêo«¢È,ùo²~@}Ÿ?u½$Au5J Hãîk´ÅI@îY?¤ÎaD¥/Q!ÊN¸„HãfQŒ&híá¦)9}Í ë22†8¦hêý 5PµU|f­b¤••%ß%tÙ!µß#¼N ’6>}Ëtì¨M›+–ohcƒÆ[CˆGÝ0CŠ¥¥¬¥I “h†¥Qj_Uå¾È„·¾–œŠ0æGÄ‹›þàù(1IâFõ¸]•ùÕóñý¦ljú š êi¼Ïwñä.%±:ï•ÓO·âFïXËMWQ^ ªOo“Àã'xÜ$ðÿC²Egd_¡¦µõuŽDdë–01¾Î¸•è#,¤‹ggi@?K®É‡çãyÑ;'´ßÓí.·ˆtuðÖ~üò“/+žÐ!ÿgM¿îF¡ZGÝ›r=OtÇõp¬ÛQ…›ó@•ÝÕ¦XhÛ½t2-ÄÑøUŽñ€]Ý-æ¸ã§Á¢”Dļ!]{êÑëÆƒ7.kB +ÇXöžTÐ{œ½Á7}æ¨öånGW…¹~hlÖ¬á‘KU#ÂQ+ K 3 < ÊÊb† cï^¢^ßJ|9é¸lq OsO˜ ‡nÂ,;¢f‹n4ŽÛ¸v‹Ä Ž-nl1tÒ˜›‡7pÈ2©é:×pèl,ºÜidšëÊ´Ñ©—ÚV&kw`%p+¦$Á¯^›’<e‹±ŽÎ¶5-³í5s ð` ; šöý¸ã·Sû-Àé|ø) ïÒ@ÍwjÍ ²ú@›ÑJMÝ[€y{¬ µß `1Å¡y'À’Q³ƒ‹¯ \žBR4O» í “­i†•å±²‡•ØÙ‚kš`#SU½Q“ˆ·¼#—D5äʤ†SÔ.]ÛÕ^YG2}†à3Ûõh˜Äúü 'Û‹òã®Ï017@%Ò¬ù€ÀÀW ƒ—E»q ÁûÉs“ƿ٧KÜ¿6eÞ÷#®k<¼ CâE¶@A‡ÇèP“jÂîD_‘0l2ãÏËËó7C‰ÐƒÊœ4=¦mÍ…t>s™»ýì—„½lȬx 8§ßBʽ„ÜסFÒ·ï_\ÎÞ\^Íoæwó÷7³÷·óëùMC¿g8n)ß\Ü^!‘×ïßL|­¼6Á‘!.oîn'ÿgúê‹úxyóú²}mšwÒJ•¹¨EŸ§uPϲ¼|wñv¶üm¾\N·Ú+ßk¾w-ùÐc¶üpJvßšCc’çò^¢–kÕxé¬lî¦kë'¥u\‚ Íó[<ùïwË{£Ðö6Õïç{yÒAºmálÐ5N‹ a⑘]©C+õõëëö,æÆJIׯ„¶Ô?ò;B‹¦·€IÓbU³¤Z?> stream xÚ­ZmoÜ8þž_1Ø/ñ¢W¿dïpH÷Z ‹CEsضûÁ3ãÌx;c§¶çÒûã%¿*m[´èÈ’LR$E>¤ûòîâúµ2+ÁYÆ3±º»_%‚%YºJ´b&Ó«»Ýê·è~­x”·]~¥b¦XZ®¯djb½­×ÂDÿ]K§MÑÀ|’FB½ äR®¿ûùâÕÝŧ ±âðGôTÆ”ZmO¿ýÎW;XúyÅ™‚•G»ñ´ÒqÌbc`|\½¿xwñr)mš²fn˜4)I{·’Gõ.G©ŸÖ‚óäÑ™ˆºCF§ºíp”EõÃù˜74mÏYã)LtÊ»–¶äM‡ÖjÌZ¤ K¸é,××·ïïnݾ‰ˆ2e±Šý¶Ä©{zUŠi¥ýæK~¢(&R9¦8>Û® s[Ê«¤ßóö§—ohôòv•Œ‡„#ƒ±a|%Àt朡n@7»MH22¡„—l©N)dôþÜñcÃDÖŸìRÈàù¥Ä¡ßô[_))£;<òx½Ny±žpKsM½gˆü'?9i¶yUÕ›"ßшôƒ£Û÷o™ áì8]á6ïò.ßämÑâ]`(0*,fRIÒœ!AßÜ£”q”㉎å†DŠÖQí⌠m-[Z´’â }(¶åÎe±+• ïárŸóÓñ@™Ü–M±ÍÏmA[žÖxGÎD=ÜÎþqn‡m}z@Éàõ²ÚÓ¶îå­ŧsQméÔ/ì©ùÔQæFPÎøË# q4#í±§…_uG£ ûDGîÍÐ…ßi«ÕÌý=äôJ@Ó°h}ÐŽêÊÍ z²—geÕkQÂeÚ¹ùÒIÞ­1W–@@KþÑ|Ç¢ÊO=[†8hÏMSŸý“ê‹ûÃäéx8*+úýt®»¢½ Ý;™0™(¸ðš¥±úðU¼¾2`'°uóÄîKp(ûüÃ5Ø·¹ÞÕ&¯>^ï7§üDKBþº´W!öž…äÉX&ûþň“±8í£ëp¯”ñ~m49й—5#Œ–\ê§'ïèÎÊ\Úçk|×%ä+‹ŒÿcËZ|!SaÉÃϱD‚#àP†1 ’moÖ2¨ °§ìÃ_e½ ”ÖnÇ-˜¶¬+7oÝi$IÞìmQ“ÊÉ1nåà&ì[Ú2Å µ/=ÝDz;ÌÎX¹wÁ—PV;qÆR@ÿÓ˜kA‰IzÄñ`ù ‰â-Žç¶qVz㲚‰\Z +ù¦>w4<8ö=E™ÔAËŽ‚ÓÖít¸gh! hñC1ÍÒND·v¿½™˜œ%ñTOw‡³ØäáûVÜó7ÄSyó´,\œÇ_%1_*]±Œ‹g…ëôFpáBZZhÐéñÈàŸÖß…?$ÁÌèÿSwSî–Œ¥Òôwa,„²%_:vyÉ Þý.ÌÀ2™r?ÖÛ0`åš @¡ïx<Ís•{*úÒ5l? BZÓmbgÉ~€>2a,- |{=†€Œ`2í“›-¯’Ø–$ •GI¨M›Ÿl¥ éX–ô`"hÌT0¨¢¾‹ dªYbÒoWAò¬ ‡mÖÃE·+G]x*wEÕQÞ Ú¹ˆ@¹ˆn$ms‰¯ÔÉ4fÕͼÉÖ“&êñaµ·pLáfFéëG,åut£^PI~£i˽q®þ’dNêT» kèC~É®ާ Ök È-–É®"D`Lk÷N}ñ’‚ÇÅRNì §s…|ŒoùÜÓ' }¤1‹¹ äY[~èæØÊ†ÛÔ¯5 ;ï0Iºl·|k¦¹náîÉë öà®ÛDzmšºcǶØS<äèE8ÐŽ 8)!E«PËÒ‡¿&´–hæâá¥j`|1öÍuýПB‹pW±É,° Ç2±êò²"ükTG»qÐÛBD޵ež£ˆ€sˆãðyÑ‚‚¹%XËx_ò›K¸ ±´À4Xi}AB•ÂÑP|n¤ç3éãô¸¤Úv¶E §öä;úÝrÅü^=#[T;÷ PPäaàðSÍá~Ê]_þyù̵“¢oS·O§M}tØ Ê–LK!‹“±wvÊÿ ¥Àn¬¤ÇâDݺÂ5籟 È ¶<Ò´+[ph#³o8à`agäoñíùÞm:äøLÅ5Ñ/=ë.ð OçºÀïaÆDöU ä^•L§ÎrÄ/‡<Šv‘“Ë¡w‡r¶˜éîÓøULñÜzÿcVá…úßË0ïÂoØËR1Bï£/TSWà GÓ&Ë轺|© `F ˆ“/”…¹ÌG˜ ãEl¨Ö†T幪\lÊfñŽÑä«Êæ€Åþ–ÉQª¢—A”ÈHËþFŸömw,Ï¿Þ6¾$؉ øü»­6…¿Þ3>«åAæÖf:mìg©5}6$Ñf¸ ÚÝÜ9taÖµ\´Kä85ÿè¿*ßÊÍ iñÅöPŸ»žZE³yû‘¦úøŠ³¶¥“mq¤Kƒ;{ÚW¡ÛÒ¥C¨ã /?e3jpß)ᔄ i„òÚ±ÿÞm¿ÞÙ!UïMT9àxѧ€sÀgÿ-èêMÈâxÜl]]—â°L±=ਛ©§Wð„™,[xÅ$àr÷NÇu€?¾àÌèÆ¾»5ÍÊ~5´äÑ€T<Àcí’é?ßÞÎØ/Rµ‹{.Aå_úmϨ{Š*QÛ@¯}&ñlѨVáƒÈ›ÂÞA.èË Îà 4táiä(|ü5wäÓ×ùñïþ?ƒì7-m+ÝvG¤¡wn±Zú÷Ýòã/¯þóê'|‹½¼µëÎá:ËÄÈCrÃãá–Y(‹µ‚Eص‹íUá? Ø+hsÍiô¿R¨só|êg«ÜïüˆL‹ÇÂ|½ïxb²O;ý›(ÁñŠ/šbìI+ µ1Ù‰töĶ57Ö¥ºãÚÞYKæ¶ýèõ£¢ëU»\F†A¿³Ñlà5ñ- Švý‘_-ls÷ñä ýìQŒ¨pgíSL?ÿ¶n¡òË’¾Tø ¥‰«,c2…»‹-%hQ¦¾gð? ø¾ endstream endobj 110 0 obj << /Length 2262 /Filter /FlateDecode >> stream xÚµÙnÛÆöÝ_¡G ¨Æœ‹_ЏKš"mÚk-ÐôaD%"\T’ª£ûõ÷œ9CJ”iWöuÄ3<³}ÓõíÅå÷RÏxÈÒ0å³Û»YÌYœ&³XI¦S5»]Íþîæ2 LÛ™…Œ˜dI>_ˆDG"ø¹žsü=:°åÒ6“€Ë¯h"B!æÞþxñÝíÅ_|Â?>¼ S&å,+/þø3œ­`éÇYÈ$¬Ü»åLE‹´†y1»¹øõâú!¶IÂb€Ä¡fB'„ííÆÎRFAY·Ͳ]ÓØÊºM›×tPßÑB×ü~ž„Á››Û90¬­wMæ×³zågyK£™ÃNw±É ³Ä¯ÂÒíwM]"uyŒºT8G¦8¬7]·m¯./×y·Ù-YV——xj¶:f‰Lf Q)í¾o¶Ö4m]]Þ¡\dä_1'™Œdÿt„ÞÑ‚‹À¬Vy,@QÚ{D¹ÞÑZfü¦µíhâXƒ“mS¯ç< ücÊ– Ñ(„©XœÒèpf˼Î6ìï¼YçUn˜§$™ŽZMÇìjwyBð¹KxÜ?„i ÉÉbd ÄÒvyi[úªKÓÜ8Ò}fM“¥íî‘Tk«áL¿¥³mG§[XÓú…Úï|ûîö‡×DVÛHˆ¦Zû"é¹)P¬r›Öƒµ¥uÓMq™ƒ&%\÷„Or÷L ‘²0IuF¦`Q¹G`5çAíJgL`^pQ ·¨1…m.:¦>„[ÀæSï½q"–ºaÛ8Ç´nLI€vSï ý;v­ýz’¯:bq2èË'¸±–&äá4£—^¦h뫇ÑËGÂ;àÙž _`KJ$O…¯T±˜‹™Ž%SÊÛ_wGë{00‚÷ù’ä6Ÿ)Ç­uÉüòõ{\;@%$†Õ+¢Kˆù¥©;Ä&–±ŸOØ]3•¦# QJ©ÒÁ²€Ïí¤dUÄB>HvcwÞÏ´h#º¨3Sx•ÉKPk¿£ÛO¡±èo»¯l<ÛLG×ê-–þÅñãìü×ëó_\õÒW4¼è±âÙM¾OÂ¥\Ž/ÿöç7Nö‰›-y·QAFÖº}ÜÂt&YªýÍŸÂPNÁ¸ˆ ¶: ªÕ}§‡WÑ}qç^ªû…)òuu–0Jt»¢Ë·½Óªêj‘WD›uyµ>[0` LͽQ½}œY¬%%§x ®YŸbô 7ñeì&¾œÁ¶ŽÜhåc‘ §ðöDÇÎæÕsLHÙ“È&y&S :©_‡g2Ž¡$K*ØYÖ˜¦0-,ã˜æ™sõóÎfU÷¼Ò‚¥P缯¤fŠÿ_q¨=Ë?Vu³‚*Âg$[ a`EÉî#ö÷2Éý[ؼÀM¿• Fè·²ÂÖÏaÒ3dVž…Ú‡ŸG/@Äqèq÷+âñP>Û½Ìû­”åOò$@RšÎC¾àS¨Ãë÷n>þ ˜s‚’ÚÀdm¶‹­­ ¤V¶=œXp~¹àGûýZ_cùm'™#Ù£ ÁÚ^zˆ‰t~ïuÃRÏ’<|–M·}Sñ â#qL°QrEéQP_í² ß@è«Ëƒ^q P6DÌ+\½ë¶»Î'þ\§Lp_¿Çtµk[Äã¶EJm³  ¥ITzJB2©ÑKÕÐJD‘M5òÁußLrDsË7êŸîÀ××Î]›7J{AãZGÝ‚+(@qdÊÎî&S{Z¿Ï» Ͳºìû'qÄ"qÒ?¡ô{¡8wÚôH¿ì¨Qô4}ÀÐÐ"-r—ßnÉÜ¿„­$p.ôA¤à<6Ø;§‰XVxßé–ß{ »oép/ßÚ"¯lŸ)ÆŠšY¸ZAJ1Ù×.¿=¥î÷iñ% 9üˆ¼|>™œAÅÈæ€LÇ^²aFˆû”>‚›â!ƒ§QˆYŠ#›ê•¦¥'¨s\ÓGoX>ã7õœÀÃ.ÆK‘…-VލW\b[W¾y÷öÍü}}ņŸqÐöŽr¬`M0°‘¯ýºPœ”ÿù-“Ý?z›‚j?Vug:÷³‰‹¨Ã“ë'{qߨú ˜Màc}»aomµ4ÕgúXÐ@]L¡Æ½@4vëÒ°ÊöjÒ(tPƒCIœmóÕÎúÀƒ…Ž~±µǪlèWŸäo’ñ„EU•ßw¨î·yæLŸzâ©€¬a\mÌ"Œó¼øëBfv­¥Šh±<ý…VWµõ‡@ 4ù\Ò > stream xÚÅZ[ÛÆ~÷¯Ø (À"šs!9¬Në š E\¤ã.E­S¤"’]o}ÏefHJ#{ƒ¨ ¬æÆ¹œëwÎÌWož=ÿZ¥7"‰‹¤7ov7¹ˆóÂÜäZÅi¡oÞloÞF»[•Då0–•Å*6ÍíFš4“Ñwý­H£ßÊ4ªwõ Ús õ9d"åí»7ß<{õæÙ¯ÏÄMÿ…_A±R7ÕáÙÛwÉͺ¾¹Ib=4ðp£³,ÎÒÊíÍÏþñì«ë»MÒX¦†wûs’¨r„¿²­NRÁ{yhÆ=—Æ}Í…m9–wå`k]y¨ñ41îÖÉ–ë$7‘Ʀ°K¼Á)´È£¡.O·2‰ª[‘D{×Vê-—ÇžpPz„Ñ©Œî°:Ø—E¯yÈÖíúÑÏÃ…²Ãá\9ÕÃÔŽƒÛåŠJä±I4ì– !eÆ½îø·ê‡²³{k›Î.pè·¶ôJ>0ùÍÆM· ºàI·5Kl‰ RI•m T, &®J’èë[“D/xs+`ï/¹óxêï‘P'üSnm›C3òGÌhëpÄÄ"…ýŽÛ÷Íýž[†ª‡>àWÓÝsßPÿ:Õ]UÛi‡= çCÇã§Á,mSù°¡Ã&ëSëj,Ǧ‡‘RK–ð²j®VÓØïv\FŠ1/´XòB$&V‰t¼xÅcd±câÌø8‰kh2§"u#¿͵"’|Ð C|D"â1€5cÝtËÐòig@™ÿÏQdè$&N <È_¿{‰KÇ\û¡?Ôcs™Q@«¤ýÜ…ª[í¹üÐü"kûñ­G«2Uq"òµl SB6즶” ÞxÞGÒð‰Hu±À ØÂPÞ×ö,juÜÌ€šåî4ÿ‚·›T½ÙN(ÏXk:þýé§Ÿ¸0Ë{ˆÕ`ȼozBÛûSh…ˆ³Ìsÿ³Ï@ëà¼hû‰FZÉX’i”Zͪˆ;eÛ‹¥W^4¨úÿ\“Ö4Τ?çX—`»Tš£=ì4•q’yù&#ÓßÕÃhIFÃmª<ùã®—xí… )52b;öxlªÙ.À| é#wÒ ¼©}y<ÖU ,Z•Óà,i4Rf-GdÓRAòô $Þ´õÛ­Ç‚³ Æ h”†7Á=p²æà O‚²ùjYB"ƒ£Žà¤6ØÝTS å”6/Ó,jvü]A€1¾cëL†¶V}7–  ÷]kÛOu[Žàët!J¡Û†8–ƒ‘žÖ›ÿXyAï&a¬W“ÔèÒÎN>S)V¾Þ"_ÀÇv=º7ìEBc'û&hØ7ãÀM‡ò–O‰Íw¶ü¦šû®A Q•Ý å@:9èí„§~²<ã/Áç¸Xóœ!SâÌÁÌÜFVy4BEú(,x+eˆÑi¬d~NÅMŠ,µòJe×~Ø7n‘qBCšFÄl¨³£ƒ‚uñÊ9iu&а’ÆB²4n§Ól~ / @Ž\ÅE¦Öt±–ôÊùï3Ð&þE$@zMc×`[`ª³—^“N"ªÓÞ×lî˜tR. -ÜС‡s<9C# )(ë¤ñ—›óH…W~‚k k²5 ýq_¢°Ád„5ذm€mð[Ÿpn»«Ç‡ºîÂ.HǹôgÛÖÿ ‚:˜ÇùŒ ®(µÿmV“=†'Ó±þÛq¥q ˜š6‡ˆÄcŒñú&!tÑyú›69^ߥNb,-©Û)ÂëÐÌ Ö©§ÑÛñÝõæNcqfÀ†‘î¥äàgh“  ˜â-«ø5ˆ]¶\DßrqFC8C vìPw$«ðõx+"’¬l{·ÙOßz­Ã¹,R¯‡}³í`ò*ðùØŠ[xO!Ý šô‚xËÐbƒkKÌ]oeþn)þkñ„@$Mž&žZøq]¶¼ë ðÀ¢*ù#·¹¶öÞÐÌØ(¸ˆE¥y‚P¯¶Àv<§Ðg;Uöèd»NÜñë<íN‘]‡ È‘Xá*ÇI0Ä4Ì(UåÀ†öjkâ<]™Ž\²é€ß÷ãt bðbc@ô’ÙÈRå"z‰æ¿'' ¿l‚rö°õºÓq!å’¾A »ÉÒú5›)Ч!ø¢¦’ÙOcmÇ Uc-#T FØ÷Ö+LK[¬åAŸSµ’¥¿íû÷@1jK¨Ú[½=Öü‘Õ»Úê ¹t{•¯—Úê‚0®-H•¯hPžÐÞn^cœ„¢ô£¾”Ÿ»»±óêÒ-5Z›:çž³ÏeÀjfÙYF€ÌˆJ­Q©&âp‰þv(™ÜíüŸír6Š;y/ؘ¸¡T…ã}Ëy'°£Ú“÷ÇÚø€»îí7[˜›A öù¨ja¯ÒYždؽ'ä]ä OMz ZEoÞã&jüóÐPú!£uø"ÐÒ¹àQΡÙUþéXÌa×—ê\LDU¯Ñÿ¯€šíð^ÌòJ“¹*-¨úŽÌ…оbït~Ö²éœ; s]Z[õ»ÂÊB°êƒ ¬t”óbÓ¾ôJWs‹?2V"Á+¹¬uvü[ÚN‡.°2gA¡Â¸X.Y‚š·Öç‘ıÑ%ÒFÆÆ –ÒšRŸÒ‡éÎO2?Ê)Là1ÿ¤r"ÆË–ʉyoþñääÀ#‘Ýv±Ù… 'É íA±Væ·x»z3| lBýB[4 øã¿9¶(©(¿¯ùÂŽK bÁ~áÔl_æKÈ û1d€¯)/ƒ…ó1¶P´–'û X•ú#â9íÎn–y¿{äÚ¾?ômo¿fœÌ1§ÝÛ:ƒ2ªä2ž%µQ`ª–i;ª94­ÓÌññDŒ‰áD?ô6YMR¨ÚØÙ|ˆ],•U5ñyÇÚ.»Œ¬qˆ¬Œ=׊óL§NqX¶ ›ëvZ͈GÌ;yô¾óÚ‰W|DZ¶xq²íÖ¤Ø+ {­àà ¹b~‰#{Õ±Ì.!ùÜœœÎ;?’·Y*]e÷±JÀZe ¦¦vì8 õB¢  S\øëŠ’qøO\¶Ùº‹pÎ@èOËQ­³+”;4Ñk»Ê \l…YŒ~ +éYâS•ÔèR&àåbU¤+в°*ÖÉäæÚYrþ>ž†!47Ä Ú|2O!ãbÎO»A–J,.­xggÍLôÊÊrÛÿ…–µ*nY®)>£ZÓUí´­ƒ»& S,O¨®¤C¥xB–#_Q=IlñŒ?¢½<‘Å¢ˆMšqÈÀ@SD*E4“°u †ìsÎ ‚ya蜄®aäuà¸;Ì^QЯg´sìåܺ®±Q‚TgöJ›)•…È‘‚‹œcÞ뤅èb“È®&´ÅKƒE5m*ÌG(ªS‰¢Ô€‚¨CTÄ^oÒé›iì1?k695åÚJ‹±!(g€ r¶S:<Œ‹û è¯Ü9ø‚¶ s×ÈgF}7u•ÍsF4¤â*VYÐñË|ì¸$eñÛtÜÚЇ}ír,³KÃêœaƒJÈ¥­ß0  h‘S²ýÙéÓÄæ´ôˆâcp§ÖÙ¼Y“©¥Žš!HN°äy±Ju–Wó±zaér#Ü#˜üe;îû ïß5®Ñ/Iõc? Oƒ`A"ø=”6^;PµêòÞ®¨Qa<ÒYr± ~9ØwÁ:™ƒÀ (•%^/Þç!!‘yîîѲÜáC4.‘À/c©<ÒɆU±µIwºd¡Û•œ¡Ž*¹ªÍ¦òsJ˜ù½}דƒë8Ýû§F¯íó£O\RŒðA½½ú g}ïs·ÖTb¯ÌÜcjO¤ »Y¸¤ðgíZ8Qh¿ô_ |.Šåe+ÔHºñ…êâu4®ôи6탌ø€v¦[w}k_^AªY¬DìDF%NLÿ e­J¼ endstream endobj 116 0 obj << /Length 2486 /Filter /FlateDecode >> stream xÚ­YYsÜ8~÷¯èGuU¬EQ‡_v;÷dÖ™¬íL¶*“Y’»Y‘DŽx’_¿ª»yž¶\e^ààPýüî⯥ڈÀÏ‚Llî6‰ð“,Ý$‘ôUmîÊÍgïa+/ÆüRƾôS½½ S‡Þ{³Êû¶ •W5÷UýIê ùŒ*a†Û/wï.^Ý]üy!6ü‰y™ùRnŠæâó—`SÂлMàKy´‚Í&Šc?V êõæöâ?ÏíiãµÓÊUJ§ò¦Âýo(LÕÀó·—2м[ÓT£nªá Œ'Yý9UmÁ-=ÌÃ=wGEàñÔû-,;ËupGž»¹C­÷‡±F¨¾SO©¶°,ߎˆÐÒ Qü ¹ÕèŸ(²¹äÎK¦‰2ú# cÔMzŸUKZæ-o…ÝæJ{D¬¼Þ¦·»½Û P`G3ºÞìñ<=þË›$‡*ï‹CÅ­œDkÓîÝ0c›(RežI辯ò¯Ãbã#Æ(2uÔ«ÛÑ0É)é©HÍ?'ƒzw†“¬`(ÉD:ì:] LP"ó~A@dÌç‚ʬS #5ЀvmÕ”`F°^Û ¬ú–ù¸X¦jKš`xÓòˆ=ÂŒ’ ” ÿQ×5Õî+šjݧ$k³gÖÎ÷¹F#§ ퟺý¡ã¾Úë¶¥c§|Š4qã±§[ü×HÝó™•8 •£ø¹Ú)« Ý­ÝvT¦éêj¬êï,ØõTV%ºÓⲨUp®ÏšY·—Q˜x=hcZ,Š#B{Q),í)±ÂÖµu‚k{MkR+Ç‚ÍÜS-×å|Qƒ÷~«,k$™ðîÀ=x¨œºZùgÖ*r«°bx”W4ÅHp(" ª6æ+[K±5•ƒ_¬¦/u›öúAÙSíy4°FŒc6"(®­ç+žùx'£Û®)2ïOTN”e ;57[*ÇGdCùd;½•8T?R»w#•u•\ír4Xà:¯ëïÔÇ&­Gw¯ñü"ö3`ñeÀJìÜõ# æx¾ŸªÃ½œ†­ sˆ øNC "úXëïݺ\Æ´ç=m…ëêäŒp¥!~áS%錟ÀkuÎÛÝøT~@ïö`Ý㼬f`膞ñ¹6@ÚF´0ºÛÊ ÀHüm^³-ŸKÔHƒ ‘rmêÇmdoÆéž¿ëœKç§òÌÜ/9_m3‚Á¾ºÕ‰~·ÑhmŸG:~÷¯o¼¸ÿêåGæ{È"_Fqˆ|p†È”QIM¾©æøŠü°%ü FSd~ÒœÏâ Dˆ ðn·”1„iÑR(n(oWCq˜j±O¼]£[C#y¡Kš0L÷Ã¨Ç )‚Æš|äb© …zÓðÄ–zÞ—§ÃŲ‚;G‚]ÕPŠ£8ç\Ëø©ÐÂ9…x‡«ûœGÈÈO£èîkSû³ÕþjRÓTâVt9žÈ®”R˜‡ÄŠûD– Þ+†SD!àúJÄ t¸:‚ú 46ÐÔÊ1²bå: ‹¼ÑÃùYIï߯ò‘=F-lBÊ:ÂEÐÅð$Na¦ü V×Õx0å@Ó_µ?¾7O€qÁˆ¤ðƒ+ÈÒŒ( ž2Ná6¨s¸¢˜!‰¯Rµ€H2D[ý¡·17 ½uŒcÄ©AõÁª¿µ{C´"+¬¦-…Iâç’#ÒéìËÄ÷U;ó}œ¨€òk°OF0êðØÙ•z"vð‹ŸÎÇÔ"¿þICHÄÓÙÿ?kƒ%öæ„iøó½ eæ+™-¬)WòYe›WDÞ,”÷kNïÈåI‘w£üû’Æw,mêr@ìí 8Ðôça’S®Ó\2¯'gX…²µc еrÕ#÷-.ö—OÔüÉ.”~¬Äù¡¯ZÚ}õpŸúª1îƒÑ!GØäÜ¢Ô¯‡*D×^h©ôe N”²àµ*° ˆ†ŒÒ+ÛP”ÄܵCE§ýœ,Ù0ó“ Anö…ûB#…û ã)›f‰ endstream endobj 120 0 obj << /Length 2467 /Filter /FlateDecode >> stream xÚ¥Y[sÛ¶~÷¯ÐÛ¡f*ÜAèMIžfbOk»'3Mó@K°ÄS^T‘jâüúîàEå¤=“™X,HðÛÝowáWWÿ~Ã匒ØCgO3Mcm’™<–FÌ6³ÑÓœ“(­›tÁUÌã$›/X"‹n«9•ÑŸs&#[<ÚÈuQþ0ÂØüãÃ۫뇫?®èŒÀ?Ú½›˜óÙº¸úð‘Ì6°ôvFb+Ÿœb1JÅJJç³û«Ÿ¯^]>-‘1“‰?íJ?Î’hÏ<ÑÑ[<ߤë9#ÑïøŸÅÿžçTáÄ‚ŠèaNY§:µý?)NžëƦ›°'-7~íý<éôîÂïOs ïIuU‚Dƒú¶i²rë—‹ê`ýèéP~”Ûº^¾«|[¨€qÖ슱œ1 ÐÙ‚‚„59åÑ>(J÷ÙÆO÷‡ª±Yé'ÙÆ–Mö!l6Yå¤,úO÷ëî=æM¶Ï­—Ô;|® Qg÷ <%,Ú?޶\ÛÝ ÆãôÐ@<†*6t½©òØo}móvøž°*²užpbbJÀãHÒ>á;ÂB€÷Í< Ò/Ñ%åæ7ƺó@Âb¿£Å±XRÙº ®òÎÂxokßdy^ãPy£¬µ1ŽïÂï©9áÑjó¿cí­Œ õºµb+)Ò&H<÷ЦòK {°ëÆOñŽGûÜØrcÃaÒ<Û–Xô2þSÞò*«²²sx6œæø*‰…à=öT³ä„hDš“A°Ã;<ԆŸÃC­Z¨y€ÚÁ¦øBÓ¸(!”Ÿ3ïzÅ"Ï|læÙ®ª6^Õ˜EpXœWOþ·ÙY?nj2PZ§9 d´Y@øwl²9ü~Ùí¯ ðüÅ'D/ml FxI^áÓ.…\ëúþãë¬Èò´ Õç S¾”˘êÜWG¸ñ&mva¶Êã)ËhëDŒ,#ÅRºÐ2H¨1}ˆXA Ì"‚Y<õUY É9‹nà@€‰täÈø{š•.ÞïÓrëä!88çpî@Žn@ë¿èð`Öƒ‹ )it,é4Ò"++¿;];Êa}|µæ ÖŠj³¸h ›#_ 'AB‘Bž5FíIÎû þn<ƒïª§'üðè_ø…µ_ ~Vu_Í‚á"زÊ},–¥{`×t½ 3‡ü1ŠÞ«½|äÚø=äôS ÛìªÍ¤»@BVB ˆ´w?ºvg«òÉ8f±Ö#g¡f™8¶äçdI9‰‰Òc_‘ÁWºL§¤ÏtJXP ½>3ƒò¡‡êþKk/ìó¬Ôð€”z¶DIŸÂ@·<\Ú¤Mú˜Ö/„™@àh&›ð‘‚BQòÔ÷ël2ÞhÓDŽ KJ…t REú“Ýâ„«qÎQc…'Eü=EQj]?Osf \¡ÑºÉ¼ zõ˜ Ù(¦³3\±Þ©:›ÀþëòËsq| ‰¡0¸”SjɘK P‹…<ÍTyZæicÔ‹IYbºÍc€¸J)öY›L=ý“q> md»d Ó>ûirBådŠÊIðÉ—¼ŒèX‹®JéÊØëk]$s)ãDË—JœÖ=™VKMãDôþ–LÁÙEm2ö7 Ô»ð;€3°ùPë]¨¿£øvß;̦{ûÅÑ:‹~>ºÄ¼º¨­u je˜T±x-çCGÅÙp¯‚€#\bý¬çïË£:ä\›[Œ‘. Ë# oî|šX¡ZŒi—IoëÜfk¿y))<øÎNH‰Ž3.€ˆ„‰Hº´B¡µà',®öáSó®nÒ­ùdƒ]Çö3cû…" Н¡ýü‚· ¾Ÿë Mû+Ýl%LÄì§ †­MUaá‹;{fù#øoµõA…‹;’o#ŒHñº£J ¶å§6¾M›¶&Z­ÓM:Šv£_îWÓ-d/>&ëD.™Âñ“I=I=Ý,Ó5#gtºNÆá ©ï aùu‹;Œß;$«MÐû5ˆÝ…BJµ…”Óí_…]ˆ/Ã0ÖŒžH«k]ZíïoW~зfnêZ¼q(…Oì’ˆ ¯µt@ÞŒ›Üly±u&¦'iÂd g®zk#€BÃaÌ8!°¶¡ïüX[uH’wÖÖÖË=ˆ0è@Ô¶@6*R@2Ψµ±]3•mŸ Oq c;òä“1ˆ·éÞëím™Bí°yCØrØË…ì°£ø–h¢.}w ÄÿÙÖÑdIdWÍ{M…FÄšŽé‰±“ªæ»j[â÷K8‡³ ¯c/¸·öѶ0£Ä÷Ù玡½b½‡$²8î½:Âº5·ØqniËÂڷСÿäѱ72,BÐ1cAÐå~¡×pÞr°PÑŽ!•£Òu«Ã 7"LC!/ÿ©ÕØÀj‚˜ˆª¥2®ç „'Iôé×j¢zs’—ŠÆÇÖdI½¯é&÷…».¡¿Á[ÓÑý¼ßô~.ȉ¡0çÐ$úñì µ]Kž$ªÌÝŽA2?ºÚ—°-ü*; èr§ 1ð>ÈÅ)¤^ÐW¤CÝ¿sÇ=¤ oGOéàÖ¬Ú>O6ŒÄœßôpÿ·(¶Ï Nx̰oà2&:üÍŒwùú œ ÖÕ endstream endobj 123 0 obj << /Length 2425 /Filter /FlateDecode >> stream xÚ­YÝ۸߿Â2sÅ/QBŸ’¶‡öÚÜ¥È-p¹YâÚBõá“äËnÿúÎpHY²µÉö¦†Cr8ó›/»ûï¤Þð˜eqÆ7ÙÉÒQ’éLmÊÍOÑãVÆQ>ŒùN&L²´ÚîDªýÐm¹Ž~Ý Ùfo{ ›4âò D,Äöç‡ïïþúp÷ËßÄðO'ÈŒI¹)š»Ÿ~Ž7%L}¿‰™„™/Ž±Ù¨$a‰Ö0®7ïþu÷ÎI›l¸bR%b.m¬™Ð)Iûöt²mY=áɰv'%S±¿ÉÛíŽÇq}·MãèíLJm# …}Ÿÿ×~ŽcQ[ú.ºæT…±jü¨;U׸ùµêà,‘±XÐQGë™äœIp–ò xI³^«÷ œ¾¶§1LØËª·ÅØžÁ Ï(‰ª¶¨Ï¥ÖKS&¸«ñ†x¥•s”±ÒÀ9ÐÖùéÔw'8 Œ\å£%ªCC×{úÙ÷]^Ò°ßrK{ðÜÝ#éͶ[G¿V}×6¶Îg¢ I‘lv0§2®Uµ¸kGÿ¬ZÜ÷ütÿ©­ž_2åѻٚ8zC,ïóâÇÿñy[ÒàßU[:”~qG²íNgUâxƒ~MoiÐÛùÎéÞõ3ÑF;ŒÖíÉ£üWí0†cwi(¿&ñ½(xóItÿíDÃÁ­hR©èaËA²|òø úÎMãŪþ‡Kìàáy´ˆg÷Z"Ösæ£ÇwÞÒ`ïùš®¬p-™»OX& Ü  ‘ï?i ¬†Ñ â=ƒnœQ„“eŠ™dBÝ@qÕ´f*U´·²L‰táF_ñ¢$eæ¹½ $xU£Ò³~•,º—#L±íô–hà'42¿ñZrÊ&ˆ«üË\AØ”‘Î@7h‰$uñ1œÀ Иnló¾8ÚØ& âTÞï«‘˜-_l]æc¾Ïë=p§…ˆÎƒs4ä†=ˆo(º~ÁdEÞ»ø!oNµ;C‰¬1Bª"¬W©$Üãì!?í:ˆÑ÷où4Ú0´¼+Ü!•Æ…Q7YZJCçz$è|t–"B‹Τ„ÙDÞÎ%úGà+®¢âˆá eà2²º§ ‡g¢;&ÒÌ808rÈŽê²’Kç­³L|Žu|í×È&`‚KÕÉﬢ&_G¾Ìø#ÿýAÍ Ldrlmo`ˆ™‰³¥žÐ«îÃ9¬®ÚóS¢nó:Ï3Úl4«¾–Ø!!Ëä*­/½;KϤÛ*QÜ#l°bí–BàpvKô|-LèRPYhÁ•‹C€ñ¤ÓÅ…eÒ0°rÓµk‡sÉç¡%hÕ,´*%Þ_ùPêË”¿U‡ãîdûK:Õpp[¸hÏ]}TXЀÏôõËÙú0¼J…HÙI? ‘вwÏ´í̧œÞ^ŒÞ)gânô·öWPÚd:Ûh(‚2%_%4,Ðn/(EéØºÚkËŠU¤KO÷¼ Æ^Ÿ'[P¢ÞI@W"¯ƒ1¥>œœ¿s$™iríxßÀGœ@2›M9g ƒnr ‡(rG7é„ Ÿ»qYow½Í½°”˜`ôsþqz°+ü ÑŸ4Á ×ˆ¥&.¹G$‘ Ñ>'NIè¼Ë÷t En“f¹]‚ƒÉcîÜ`—nϼóƒ sx»Å^ðeØBÑ3¸ˆ,{ ±Øoš×M7Œk¾jðy(\¡ˆƒ²?D@_±P¼­CDïΤ¨ÈÝ#ýÎò-0¹ É{ëSŒ®]ØBJ¥—1éœô'L6 §ïÖ®àE ‰„¿˜e|†\©I˜6ò÷‚T³lÂ(†‰¤Â~1n¢g¸Ã;ú=«q´Ì mûz ¢-Dwe48wòª@mKEæöÒÊL"]Ò0è6f¥¥»Ì©Î ;)yåZZ0‘|+üA^Î ü·Rh(‘7·z)ü¡0èEEF-P".@”àD¤úH£®uÝŽ‘+»nJã-M­«—q¹§4¶¹4¤H˜¼?ò“nu­šüÉ÷bZE?>kÑûa~jµj‹+Y7F¦]Â7„úÁ¼Ê`ŠTr·üÿ ËÔ„§b‘¡·¸öH…h 4Ú&Ô“-ºÑõ”0wÌ]³ìÂ.ÍÛ¶;Ž4»Ô8Ð)‘i»Þï¾8¦¶£ßfB@›]°MùR©ÿØ*h"íÉ9a’Ð`&3 £É€º y]‡Îv¹þ:á!ò5Ÿe;·¤£ß«äƒ¤Y'R{j˜FиŠœlN³ÐV¬Æ×Âi,¼÷ =¡uQÇ-b„¨©œ$¯k[‡œ²æe*ÞþþÃß׋Hɸ^–iÈþî™6X´>8qnK§âsÈýåuäòÂC˺Zf¬¶¬°3•:fqzU$G ¶ü:(õ*T^K ¶®êšFÃÉá÷KKŸ˜ý¥T³Ò©´×0gÑÑŸ?|"^j>iÎa“SäÐ÷MNaƒ5ºzÃ-ÎýÉ{?]CM¯7NN0Ç ^(}yÊD6yônÄfXGí.È¿öh9)™º zÁN_x Æþ4¼Ð…À:¥Í×ӌІŔCµ~]‘-HÖ©\>ÖꛡMANRó>+#zЃRŒí~à+2§‘Jw”j¨jK¢A-nË󉘱¤s‹&~ï“@küÛÚN(ðùU¡Z«6œ‰Žé©@šìîð¹w RRtÞ¡£ÑÞoB%çÙÏWþ÷´ôõÙ 9 ÐÉÝWOž4Ûyö¢†hц¨koˆËˆ´KÀkéN(jb–/X&¼P/ fYQè5kÆ{£ŸÓì¥O@û¤”œ7ËäŒÝ/Ÿ šSu `Íãq Ý¢]¿ Ášc}¤Ü^bz‰òïøš!])¶¬¨)8ËdåC(ËÄ$¿N2. ÂÆíeâÄ«Šôqþ ã)¿8ÖZd€²uþØù´*~&X¢“?F~0rœ‰ß.¿X¼®êÆ!·„táa©V_KeTœûÞgtüÎûa„±_{¦u •7‰{v£¼ÞVEˆØÌ*seíÙÓ÷ìoUýÑæåô Þ^=¢‡,G_  eİî²êòÄÔä[9}´jŠ<<Æç^Š›˜0Ý&~3ª]¨ ñaªÔ@J$Eª™6‘2áÿè€ü6 endstream endobj 126 0 obj << /Length 2398 /Filter /FlateDecode >> stream xÚ½ZYsÛF~ׯ`UBn‚ñ܇ו*Y>SºÖTjâ<@$D¡Œƒ!À(Þ_¿=˜HPCŠŠQ.WÉ Ðè™îþú¼¾9yñމÁÈ`CF7w#E2z¤8CÂðÑÍ|ôûønÂð8®ê8b1¤ÓIDµt|YNˆÿ5¡bœä·É î+=&ìgwA1¥“?n~=y{sòç aøGº˜AŒfùÉïàÑý:ˆÁ“‡†0q)‘®³Ñôä?'¯ï–h‰4IbÒ~·7Ba»·ø›%~'/'ã|ün¢ñøtêHNíÞ€#ëɯ`MX²auIîR`â{KstG8+óeÚ.V§yb-9¢‚·¯ü0ÖERíU„W%65$ p×;Ú•G)9["JYoéTÃ šµ›œÖq½®!#…ŒÂ ƒW¨1d„v¤Ÿ1fAŽ`D­FÑ©·Ðj‘ÔNcð.Í’ÏXà þ¸I1k]Ìê´,öjHh«Q6†¤ABùžžŸ_]â#4TÞV![s€él=_•Ëâ.F³CAà’~q‹ÌÓÓ<æù?fª­ åˆ*„×SœeMx¨&‘’x׿š{q¶(!2UZßçî^]ºÿ×Uâ.ò$·Dg¾z´ñí¥q›Ÿ1 ÛF L:Uþ¹NZ–‘0‚A±¨ïíµEœÀ¶`ƒX%•eí¨¶ÞjV ¦¿‚DX¨v‰ŸžÞE–Þ®&ÄÂ}äÀ…­[ôŲ›ú© v_(h4Êõß{syzþñõc7!„"MÚÔ rÐMâLrnL%VFܺçg!ñ%AÚÈVüuÁæiI‹´Þç wž2)ú¡ÝЪ¸M@³¸òó¸ú’ ÷£Ic¥§ù÷·ìc1šTÇ+þÃÍÅy@í˜ ¦(8¶@B“oÓ;æHCü²¼˜¦~Ù·§oBŠR 1Až©y›ºË@9dg5ˆT ±ì‹Zɞ؅!¾]R!B½-Ä1b`Š0£ÃˆÖÕl#†ÞÕ%$H`°ÙჃÙ2$…$)»xA”PSÉc ż @ ¡Óãr]/×6Ÿj5~€HZFCÍÂ:€¼º¯óì·Ô«Ûrþõ›¸Í6²§ÞW/#~áÞl¨ƒŽqAðcc$$1»àúÛ‘1=IÊj_Õœ]]Nƒ^´ªÓíq>@£ˆh=Èî)MPÞßþ<­–EKŠ#‚»„RÝûˆ-ÜURTP¤5?3[×5W6™„$%Ø ÑÉs{‰‚ £ö²¥q5™`f/°@9’Ë]ü’`’Z¦:l#;£”}} ¤Ÿ‘¯Îßì‡ä%=°VD{ÏxåÎi @¢ä ÍËUóuߟ^£'th›ÊïÈ`˾“|›zÍF[±¯ª:Z%U:_'/âù<µµzœ¹äï;â%ä쬶™pÛDôÝ‚®©¾l6.öEbõßuRÌŸaûë÷ûmÏ QÐrÛ+[¸¹Âëêl¨ˆs(} ±ý6}õöÿ}³0§)ø1€—`êùYx¹r3‹tîÑ!ðÉNî–‹ü±8Ì@-lø fa+ÅúV)⠴М ƒOàE8o‹ç×ß%' @—M¶øÎI‘ ¡s˜¬hy #žÊŠ*˜dOÈ01ýùÝ¡ùú?>,*-׃ñ”.¹~ì˜;ùq÷I¶tWi±ñ1†LmOÿš'Íà ®ôøÇÈÒÿN q¦!µÏ‹2ä—ñj±¶¾ 9JãñÂû{&‘¦züÛ¾xg‡7ØlNAƒÞh§1t2¸o„òª‚}ÞåI7>[5³'V£Šq]µ'LöðGôP`ÝlPZ®’(8Æ#HÐ.+ß¹#8â{⮢ÝN£Æ(¢€î~Å0ºQ¡Á¡å ÑͶª†û¾úÃÇéÍ`Ç&G€¿;Ú²ÇU;&Š€w¶^­šÌaçµy.ÕXX‡ai瀦ÝFöœ>Ú9õft‹Û±_µ9=ûê'íð¤Ã;þí>ûXgu ´.Ê"º>»º¸¶]滸þèÏïÕVÙTlyõÌCM ’éÇ‹¡æ 9háág²GÜ>nüáÃï^üK«eoQ–ÉjÖUUš§Y{¨X=¾ãømúvï “b»!昖“òaáür7Üeõ±CíVR=ÇΓÝq?Ù9ã"fs‚ Åã"xIôÀ¾Ugõ×E\w[ŒìgSÚl€møÓ•ª¾U’o}å4wTiÎ’I³s¨ßDQŠðÞÌÛ Á]ˆÈžœ?té}²Óò²U!‡?ÚáHhÍ7;fûK —8›°q×\qû)‘= (¬bUÍlHЦõ.æñ*Ø’m?lzô‘Uµ÷ã˜ÎnÿžDR0¢ÉØïÁþô›h¨Å©We–Ôm]/ ÞwÍÛ#L‰´¦}»ÝÆ3(¿> stream xÚ­É–Û¸ñÞ_¡[¨÷L 99u{‹=¶ãq÷$ KŒ)RÃÅíÎ×§ p‘¨^žóú  P,j¯ê«›‹_^‰pÅ|/ñ¶ºùºŠ˜%ñ* „&Áê&_}v¾®…ï¤m—ºBz‹‹µËãPrçC½f¡ó}ÍCGí7ªx;L<£÷9_¹y{ñòæâ¯ ¶òá 7ˆÄb•í/>ñW9½]ùž€“[¸_Rz2 a]®®/~¿¸ÒÜÊ <HŽÜÆÂcÐòC/Œ%qûjûÎåõÍ:bä;°Œ¶E]`W´] ì2ß¹[à0òXÄV2N¼„±{Y C@8ü? GŠ©J8gžäb%#î‰Øèä¼ðY?V éÈèi´ïÂ*ãŸYgV,IZýɹ¤Õ •¡„Åùþy±Hî,ø)±<™ÄÕ©¥ÝË€{¾0RGNßÈ’8v.ó|톉tÚþp@¥¾Ó!$"ÃFn><¿zCˆW%;P¥Ý€V¾O»Nå„_°*p ´£Ð)Tk$(#餕¹t¯öø­@CÓŸíÓÃH€tWžöí2ðµ ¡äi—nÒ–ˆyFÁâØCÙ àûí@X´J{êíÚxâ4*Í[Znên·tIÂ=Θýúêܼ`éžPxQdñÙ Ô¸ÔªšRCñ>DmAò(6Wæ%‘¼Wp®çO?ô):5£ï w~ GLSóçdÞTYÙçŠPß§?Š=ê¸ßà]ñmÍ}G•Å®®s‚½l»¸ƒ‹õvdñÓý&Oi­M¿çæhåþ׸݃L>Øþ0§RÈÉ-ÁÚŽL±SÛ;:ØÐÇ*m²]Qméì¶¥ëƒÒš‚³z(~÷£èî¡Q[œ•iĸs³SK*à¯~­ê­Ú.é×µxú}¡Anê-²Oo@QƒÛf)ê+Nð4ï3EЧÓpz¢OÒDŽž„öI!5¿ö+ ­Óàe`L†Ê.mÜ%½¤Y–eÜ>ÀÆ®ÈP´p¡æÔ¸Z±­êƒóÞ<@ëÝNÑ¢¨Š®HËE7ŸN¢äA×ç±'!O´_Õ1s××//?=ÿÇ© <·…G™—nÐúúŽxNe<“A”àGž™´‹\é·£™ßî”qER­–nµ È5|^ ÈoJÜ^Uݱg Ot>;ç3Ïwiµ5ôê¾;ô&3t5ý6j’ °)Ì¢Í@Oí$­jfe¹j ¡¾µÓ2¹£µrkD³ìß§Í$áº,æÜ¹¬ $£ –ŒNŽ(À:¨[Ь¥}}èÀGÖ…1Òì{Œ„ò¾îº¿­Cˆ´‡üÓÔ)>wŸ™øB«!bà&Kˬ/á>Ôþê$c…V»ûCÝÝ_suPUú: ³Ø¨R+ÔVýÕ« \|A¿á ßE bÝ2•`$%}M³† \À;Ê;L¿z±6á‡diܦZÏiÙéx‚d£xPE)¨‚ðJ0äî›I©•fP„†3z5" âžÍø™ŽaÜ7¶ÅkQzEΧŸ”jÍ9e€}DµBloµìáD?O&ÏAøgξ dᯊ¦íZ`pDÏJµöœht–ÔØø×¦6¹ðýÝõïïŒÊOŠ–sö¾ƒ‡€Æ@nLÆá Î#÷bìc,‚†$ybÙcäÍä[ó Xa¨¸àñEÞ+ëõÉsmÕ:¦ÅÐ-üÝÜD*vcéù~4x ÷›`‚ˆ”‘:e+]£¤eokˆG…”Åâ<€ÒHÆ?S›?™ÂbÇŠ\ Ä“ôõ]FLoñáiõlj+ó–å#:/Ÿ=Ôk>$•§R8ß°ˆ@&xê7ôÕðŽ=KÈ!fçÅWP»„2„}4D€‘:Tsê˜K8Óú!h ú$Õ^£kÑáNCÄy[‚ÕxþPƒ2ɱhñŸ¾íRyc¡Òaz⃎±ûC¼Ñó #adôf½ÜH„Ný¥IdÐã»i–©RYñ䄇w_B<0xÂñìÆ2Q†\…àë=Ô—î¿×&b;’ê\NÔ¥ýbÕ%WuùP#[<“_„ ¸‹ ¬”YŸcMžc„…±dMƒSNL^Â%¥RX|ª·•NŸSN¯•2a‘ hE<×-U‘ºü“¤øZ¥åÖfÒn·7ör³+Z:&%áê­05àZíq•°Ð†#šHmCϺQYÚ·†þB9Óš³R-%E¨gÁªE¡g Ò¶S\êÖ PDe¡Ú*ÁuM¥Æe0VÎøÅøÀ… ÓQ‹€;›ûGº´UB)]™ïç’"´b1•ÛY]ìÛ äxø]êw¢%ý¢iù‘…ƒÍ|¼~ãž7tÉ=>š!Äö*ò0Òî„ò¸BÑg ¦¥k9¤]þ(ç‚t1t»´#²™½“šejÕ.Ü2 !˜‹¹Ä𭔤—&H8Šåú=öNº½ÅY*ÚÒúüô‡A" ùhñúr¯xÓ,¯hôYÞ¢ÈLCe¢µëT<‰Ðä\äEk ]cÞZ]x„^…¿Ð+÷x“^Û–·Â4\‡MÂfßQŸ0®¿n œF3ÙnÉÜ÷µÆbxUY¤Ö5”^-½˜Ç6íymB'.£SÉR„̹Ä‚²îÇÄØ}0û0X´Å¾(í(ç‚ ”å¡´…²F¯I,à-GT,LøfÚUŠGÔ_Ïìi–w9DÞíË»Yˆb9 p†Ãö£e®tï>´ƒ ô¢2hhTL¯ïéuqZè{Ñ8æ ÐGubÎ7KªJƒQœ , K“Z-}•5Ý>³© [&G­P¯ J[¨YÍ­Zs\Ó¯Î+¸H Ü¡›>(QUëeÝЙOè€Øˆ¾ÒéA­ê°3‡HÐõdSW0î:Ü‹Yâ÷0 ÆÑ—¢Umà‘󴂉 ‚!”ŠÃ$±‡¶¾½; 5a8ŸŽÛOÄ1Ò¼aF*ûtqÐfƒËgG³TjðÐÔ' Þñ¤A×½Ææ »¿]ÅšafýAá¿”DL&3°¡IÌb¸¡'ù`Ëî¿–L—…1ÙÉÔ)§×v “Óa˜ÞF_ÌÑÀ8^( äº<„ 5áìŠíì:Ûª†^Àm&>வî3\ÓZTm™Úv÷ТP²èhœ*üäl¾dI™hxaÚÿ.1r²ÈÁ±^¨4^B£7mA¨_Fˆv€ /5 ©LäÉôÖ¸ Cð/3‹Ã%Ž1L*ÌØÎC¬X±áéðJØá•™:Pftë'·ñ(0“,,C²º§Ùdp_bŒ{qÌÆçýqî>9x7¶Å‡´hFS“14dvEÿIïË΋æ±Â‡ÒnÐë·®?,Þ rŸøÒè@¤»éH;˜FlÏCm.ø‘(ÇÀhÀoª¬QôÿB;¸·EnËŠYp}ñárIJ>qïÿÜ”&«jJód Sž$ªD îÊHB"´<ÿî>P endstream endobj 132 0 obj << /Length 2567 /Filter /FlateDecode >> stream xÚµY[oܺ~÷¯ØG-eÅ«$œ¢€Ó&= âÓØ@äA–ä]¡ºlVR Ÿ_ßu³¹I ·Øq‡9Î|ó õúæâ/o¥Þð%aÂ77w›ˆ³(‰7‘’L'js“o>w[i×§;i˜dq¹Ý‰XüÖn¹¾m…Šú¶8<Š._QC„Bl¿Ü¼¿xssñõ‚oBøñi™0)7Y}ñéK¸É¡ëý&dzîíÀz£ŒaFkhW›ë‹ß/^[mÍR[!ÆC˜34,’‚Ô}»Ãàòúf›Àƒ4ùº¦]Ù6$8”]ß‚¾< Hò9ÔaÖ6=ƒ÷h1áB‚)Wm­YÂ'­ÿS¼~zL±d\Å+–(Nû~¿a0T£ñCû‹b\V•=¨{êéŠô”ÊfOÛ;Ü-, — p1©@;õǶë÷§¢s#Wª(Íb#Ýѧ=ï·`ᢪ&©g)mX%ãW׿ð­#93f–§}z›vMüu@çƒ-– #<N°Ù‰|-Ô›oV ½9:íÚJÜ:€O=“0Çãºw©T½P^C„,œô³^ñïš = BèO0GÚ[7Ä>°=-;Ò¦™|wÔ ¨pªö‡´ñ-ÇLñùÌ»üK0ÔV2cr-9áDW€¤ÉÆX€U–» 9‹Íä,õ-É9Ós¼p:Šº„R3+ó¥ó(ÁX\éhƒ=m&/Öà@‰ÁßÁ ûÂ{aÄT(Ç…ßB^Ÿ‰³ÙÝ{T)‰@¥¬­ë¢#.‰èÏ–1UzÚ»Þý|À”ÐQŸõ8x‹c_æEGÃæ[›Q(°‘˜Ðço>5á€c=ޤ€Ã5æãƒ%îkE)$$œhmÆl‘Á(8÷RÆLQµ#POm_”MGÓ€h­=‡24Já©8ÆÏÂ󳨢Ìyl>‹-ð<ÍØ™VûÖaO¨Q¦gûá€þP¸i®ßj¹hïÇ!e³{Š4£Iºž¦2Ô Î]Ar¾—ì ÐCEIp‹–{ Þ«2;¤EEÞn5è}¢ÍHöI'* nP;|´£¾¬Í juÇ¢È;êŽ$#[XmÃ"úÀŽøã`ç ‡š‰í˃]û‚}QöÅ»tÞáŠøË£áL¢ÀmúS›S~Øä\E¨ƒø—Þï)ÖÏ–„ñ¢$Â;G‚ªa_µ·öô£Å‰Óê„Pi[xòi,?‘³FÕ4ŠVÅ“FäP†& ô’Ìh¦Cã [F¥“BÒSË¢6ÆÍaÝš†¹Îe=aßBèņ‹ïKKÀ´¯Ræ±É#$ùÞ)iÎø¼gL œY‡?eáÕl°“l¨0F<á b&çèý?Eн(4DW¶P,¨Ñ´#Ç«H—#G-- 0ÆÊ+áàóXþëÖ¦"ªöx,t6µ»óÈFöèŒE!è<Þ{`#Ñd¸×ïv¯?àå•¿>ÖQ4½¾ZE}$ÝeÇ"'ü£ÈÖ|0x³J{Z-“ÜJ–5üY\ÙÑÃmW ˆbŸ­2@8ÞÇ81žY†í¨—FéàŸïÜ73ÀiÑuãU…¯¤ZT’£,j¯¾½E‹[äñóŽcôYGç“à³ÒùÀ¾L‡òÛ‚ž‡r`;ƒ™–Tä‰(°¸·{²swrˆÈªeìØ™pN ü×°‚d¶²8Èn±pCŸÊœ8 tÚ»";I³ÞÞâ4C]ìOt%zû¼·B¹5ô™;`}b)É|î* ŠåD!œ—*È݉x”›þ•õë33мjóÒúét—õ$vIjŠª+kżª@êRQò,6C¬èþ³‰»yà â½N(skH>×µØþ£LÛ¯CI~R{¯M{ÇÏ¢éKö 5QVAiWTw®¾†‚Ä^#¼hrw‰ÞààèÔv®ü `Ó—½»Ò/ÏW´pRP®$/)Ýž?…¯¢UÜz€bôy­yu¦b+Ú³€½üEûî ç+W*ÆEâ¯\¹ÿ¢‰&ü‹©…Å)L‘Ç*E€}èHbK9ltà}.L-“æÏŽ{ú `/{äšÙß°ñií…ó§ÝÊý „) î¤LÊž¶ª=دFF÷8bÚÊ{µ ⩦ƒúÓÍ ¾ë²ñšÌF­swðAå×ës–zÄÄVV\º›5h,Í!¹"s`ÇSs tL<¿à~9`N›øV¶CGÜmfGÙ%6ýr5/9}"ãÂ~#C€×Χø#†#EⳊí§Û¢… q[`ù­É^X+ÖVÕ†FÜÆVKI›ëO³yÕ]@!Ù{¬ŸÁPôyKçß Ü~cHÌ|»‘Úë à8Gb¶ ñå!®˜˜“⟔åblx¯v#€2­¥ ”¢ËLBJ¥¤JWdmã-2Áb!žU‹ïÑj0袰šy5égZÖŽÜcå h4N“·ÛZxu‘>ÊÝôÝq”𨭻ØÑë€[}x9¯©ñ3Yªzþ¬†R™…f#¡DÕî­œòËeIÇ endstream endobj 135 0 obj << /Length 2561 /Filter /FlateDecode >> stream xÚ½ZÝ›HŸ¿Â·÷‚¥Ð¡?íÃ)s—œ]V9e­´»ã1wXƒ“üõWÕÕ`°Û3žMti€î¦º>UÕøöîæå©ž“8Ø7‡¾¬ Ë.,"';Ô4ɆîQÿLÏCJ±!`< óÆêÆvY¾ÂÍ|)­Ð0þ«j‹ï?´yýT‡Kð^lì¶à %!då Í ]qïñÿQƒ;÷ ¿.C T÷Z3cÒÁêÌK0e O†%ÂøÈpÅTk^ Ã&(ËïˆÚˆ†8PÀÀɹ÷fßìÜÊíacaÊÜ Vº+ôĸà,é\ØE»”¸-ã#íª8*’Æèq,áFòÁ"h?Ÿ¬‚åý=šôÆ†Ž™ˆÅõ.t_=FÍ@ é‰Ñû2ßf…‹¬7K†wYb¢p©‹Ÿ«ü:FVU:á*ªg«\øÔܯЀ‡ûKóøÏIšÕµ§zÀ²š0МJõmÕ¸lq´°"¡Ì\ô^PïÜ]ºÃ*œ° 쾸p¤ƒâÉaĹ Eƒbî,¯Ú“ŠZ.± ‰‚×”o½Á½ôõOŸž†¯Á)–›á(pR\€SÐeÝì²²Ûªéû±y§÷Ý9ʘ·l'8?¶Šð)¢ìOT s6bîHÞSåNž]aÅÏé_ÍAiòÅ€ìWem;ªt34‘C„ÕuÓgGýÌꨉà³fò1ÁõŸ<¹Vpeôé÷´Ê+®¸¬ œ%]Ðy³vet˜BE2„?éÄ’ÚxëÈÒÌË»î¥Õª$[¥<Õ€ÒüÛð@ÄÌ$ÜÒŠ„û^¶ª@Ÿž}uÌ¢è;ík"æD8nÛ7í%‚€9žnQðÆóæop #pà¢SèÜ:$¥O¹G‡ïo†L¡m«ˆQcŸ:œž°Û³ÓOHa£Ì‡q(’œŸ‡Þ>]õ\} *¥W•8Æ•8oÇÆ›øR–ò1Ÿ´]I¥…ç³°0œEk‡m›•*‡ è ·ÀÍ“S.Užv¨¶Øç#AØ×}ÙO?Âzh€‘£”þ–|'‘Šÿ¿$> stream xÚ·TÓí7Ž”„R"J$Fw·t£€0`À`°±Mé’îéîîV¥¥»”nÞéóüž_üÿç¼ïÙ9Û÷sÕ}ÅçºÏwÌ Zºœ2V0 °"ÌÅÉÃÈ©««ð@ ÈKÀ̬AAÁÿ’0€HÌQô?,ä` -“¡Ð†ê0GÀó×P€GP”GHð"ÿ2„!Dò gˆ@ ðæF0ËÁànˆ- }ο¬–l¡gÜ2`ÄäP¡lÁè-AP€.ÌF¹ýWVq[ .ÊÍíââÂr@rÁ6’lÏ.”-@Œ#œÁV€ß%4@à¿Kã"`èÙB)taÖ( @  K°#íòÚÑ Œ O誨4á`Ç¿ŒÕþ2xø»9.žÂýíý;Äñ3ÈÒæ9ºAmÖ( ©¨Æ…rE=€­~‚ HÚä ‚@Ahƒ?©ƒŠ2ں¿ëCZ" p’ þ®‘ûwt›­ä``G’àw~òØÝw7kïsqôø²†8ZYÿ.Ãê5œ[ßâô¬"ÿ· ZDðo™  ñ ÀN°«¥-÷ïôÜàà?Jžßbt ^p`.ì±£< g0…x öòøOÅ#€Ä°Û@ þ-[ÿ…ÑóG@\Æ@4ýxÀߟžLÑ ³‚9BÝþmþgÄÜj/^¾TTæø»ä”²²0W€'/€“Wàò „Ð^ÿG ù;ÿðUq´†~û/ºQÿÊÙùo°þ½!l€ÿ¦CS `ý7ÓM€@KôÏÿ3ßÿ¸üÿÑüw”ÿ+Óÿ7#Å×Pè=ë_ÿ=ÈuûÛMÝ×(ô¨ÃÐËàø¿¦†à¿vWlyíð¿Z½2Ž6hJsòðsùÿ’CŠW°•eiûmþ’ëÿ^8(ĬCB~_1h/ ðtè-³´G_#H47ÿRè•Cýäo F/Õç¡àh ³ú½}¼‚r#@<è5µ»þa7€›Ë†B»Ð5{¬a‚߃p+üýABnÕ0À­õâò¸mþ‚¼hôûD÷ïß&Ânè?—@V {¡CB×÷ šuÜŽÿÑ>° :͘ÕÑUnù@·æeÑmùþs Á®`K‚éI˜¥˜¿]•ËY… µ çú°8Î~Ò™/çpÎ+l„ZÍfÑcÕ÷KÆž" º“!Ê] ¥+´öσTÝfÆ»G–®^«&ªéóg}¦#qS²öÝ«–¹5ÂÙ:³éiEéšEÛŽ—µ_v4}î„5`Ü×X8ɶEO2oNÄ¿ÉLj”ï¾3$©LŸˆ»v³ÿnî‹wþ›ìö6Y–§ò0Dzp÷¥ê9Ï”œ÷û<Ük,“+ÃåÜ]–O<Ë]—MÕú`¹^¥î-?–¦Hß…ÃDô…;í¡þ¹šBKgW{‚éJ0£¬0 4²Š/Ž|)>÷ÁZ0øœ |Ã/vݯw1Sðwœ"­‡b£í6‚ýÙ½„˜’ÓÏnI6%jú<çw]ëðÕM6²“x´qdS4­‘‰.@^¯Q[Ó”&¶õâ|0Ëúîþ[rí¿í˜È𙥣ÆÌ0¶±Jêñ÷Z $|ñ¸D 7Óvøl¨©Ó$ˆèÛÌèo-nafÊÒä,^ô½¼[w`ÈHÿƒs­.=µk t° {©ˆÔŒfóËaÞ·â=ht ×h.S–<–÷:þ‰7›Ýû"ž¨åGM%ÝË2?›"Üv‹¶Æ´çE Oó6Ûˆ|‹7l./üö-Y€vq?«Œ0„ÜÎl$ÙRêÖd³à¼ñ"ƒßpŽîXO¾€.'Íz©¡üîÛ‡[Ž:‡Kí´f`éòjvLwÏ„èxCW½ÈÛ»þäTÙ@Ýw‹H¾/‘‘öYÏ^…[ĤütlÄð›Éâ®î<À!›»ì¾àÙç™!»Cüݰ¶Š÷–&™V‚Õæ*ùÉzJ¹ú˜ÞTOá¤Ó.Eg Ô››ã’pmb’D2^s7š‹We¦¦+3œÎùZÕ1ÔùˆYñgÐË%ž}¶záLþÄR5’}nRŒÃýËûFáådî÷ír´Ç]z%AN}‚ë<*ê$,R௧ÑÁ;Öuâ?íT¯Þ1Ù7@O˜ÍŽ˜LI’EV9{ü²ÖÙƒÔßPÍ'é}Ñâñøêû€ŠÜ1+äÝD†âŒ‡…^ëP‹5nàʬRµÑ]–àŽ‚OFé"«Ÿò–.N÷j%¥|̬Õèe}€í鸤Œ-‹Ñ¥‚÷ ¸ðCš¶hi:S¸]þh òòÏ BmÌeû51 ù8¡ü—¬/¼:È6FâØ*…±uuÆŒâÝ‘‰§!kxíâ5_µ,û5‘0wÜ‹ÔOo XòàÎ*)/”s€-®‡™K¼ÞÃgYmzØRðK†’…Þ}å"Ÿ÷S¬}dEÔƒµ‚X½yµ$Ý^+…¿á£©ò•ím”¡_^ÒõßÃa,UµÜÞ0# 8’¼úx¥‘Èa§yÐðqðÂ-Çgú ü.S²þ0 (ϧÊ']@›÷%ŸèãôzêñJ#K‹uËaˆ€·YYò¯ΣÎó¤†G 0B$µ4™•Ü%µÖÄ3\øŠ¹ZYðú8aÏSÆR.p|ïãhÁyíÄ7|ßJÎEµ/‹,¾óe_ÙQH*ŒÛWùT1õv¨EµÕ½ïÖO¬8I]¨A/ô”iGoÜR{Àú}}·WÈì¹´PXý°§)= Ü4ymƒÚ½Ñw^£Œ%ž*NiBŸGº6‹[S¬DåÎÎE÷8¦¼6ýoܪ˜XÐ)kAW§¥,Z|7‚*¯Ê·ÊÊÜÕì̳ñö±åW/*Ý`®_ëìÊö]?Té¶&a™¸Õ²9>’jÊ0Øzû¼Ž’î—ƒ~€ÚeLá>7dTéC–8e­Â>olM)©NFÁ7ÆÆÜò«°Œ$Ö©¨¬N“§Ý„ó%C8%]Æîóne6„öIT-­¶Àɇ7z-Ô¼¸%‡ìɾ?>•ÐvÉÖ¼¢¸ ~B-?õ,[ߌBMK*º¶ÿÓ# ¹² ]õ“ ÈþÄýÉx"Ò¾/§Áë÷Öñ±OÙ=1ìN—ßÞ c:ó<È`¨W ]ü4ÚpCµ=£+fö†ÀJ;á¹ S]SB÷‹Öo)tœ¶œ~xnü8ÆÛz’KäYB±`õÊ#3ž‹cÞ.ÂæÝBÝg8R<‘R~x„‡“2㽋nPÖ·«jw¿ š³è±öõ£Èö¾oáwP;H²S\Fé‘‹DÍ*4bæjÚpÎ$Lv†W(oÃ7”qéñLÜs®»H¸GÇèüì p<ÒyBy†üô*ã Ô®GÜ U=Ý}FWzÎÔ¡îæØÉZmH”¹OóÍtèM>÷nÙ0®j«½™à3¿vκ;"üôï©¥žpm>xÁ‰ÚJNÚ®(­âuOŸøퟋD ®+ˆâ©…öÌ›7[¤l„bd6a¨ìRŒÐš±¥¿L>7“(é¢îçê[ |ÿ,·,öÖ+@Òïª&ÿ¹]&)´îÍu¯FíW<€ZØ4ë>× ^yÖ„·CŽYU3“i³¹ˆ¢/#…áÈûÝÓ-~+\ˆ¼ ,ºCãBN¬’ëúïÇD[~¾î­ 둈2â¥Q¦\Ù"B5LîШMÑYŠcÀä‹uÆè0ÏkA )ÒÜ— æ(Þ3¥)–µ’‚?s1Ÿuû§lÕ5'©}KscF_‚}îòÑe³*]™Cؼô‚YŽÌÓ©Ž—McdxϘtÀøãòÆX¥pïÁŸe?Cqæbe®…dܧ7Ó°­Ú4Ä×’½ãŽÄ´Á[N6PÊ)åùÄj|ͬx׳è)P½»'HÒ!³x:Þon¾Öf'ÊMˆùãeu¤Ïí~3û… µÉ·Ã:Ù娙hñO;ëZáLp,»RŸŽ¾m—nT¤`R–ó¼h<£þjЪŸÛ;ø¹õ¢)Ý.À+›À¤ ¥,·swÿÓ9]27üò: ù¾ܳz/«Dü}9uÛΗkÏ..DËŠ èð݇`Ö|Š™7rxI{Ÿih¦_6ÜÀ™,¿H@ùÄ5L E1ŠÊl‹røpJP‹:ëT(ÙÕžáZ.YÔGd{Ól˜³ÙËÞ[mDzóGI×ýA%‰žWŶßvØìËS!øÂcÑgÒÈWÎ\•n¹¢ñˆwkž¦¼ Û³+_U$×›kùzÿhßJg¶âiWó!盉ƒ¥=¬’cã ^ÐÐÆ"¶O§ÂNÅ~Ø3¹2§Ãn–Àk£»*RûÆ“°­&³u]o?Þ®\ê€aæÎ1ËM«Gp©ï_ÆËÊÓ¬'ä†âVN6âœÀÇíq³ý†d²èIX§MÕ×(§H‰ñIÈOæ¢^ù–ŽLhÆWBç¿|u“ 9*xå. îKéÎtóvÐòÇpÐ^7Ù*óÓ6$ h 6Çyþ9öÆ>¬¥qHIÁvœeKê¡_àÃ¥2jóøôUi‘0†$˜‰´Z,H/ÑTEøØ½½ü){穾X §ÂÕz@,¬YÏbe¾]`­¼¾ýª•7®M²ø»ª«_wîÒG3T>miêvÔWÏÃ)æ`à‡!‰ …héò¦8®}ÞWKˆê\ÑLVZeÉðÖŒÖÐ|õ¸Xùé·þ©÷þ^†iÛœ¿jÕ—e†Ý‘æH ¯¨Œðéëndƒ4¹Y,²…31cU1¸ÝŸX3F¡«8º¶`k¢dnqçD'œ“RÏĺp0ðJŸïA¹SJÍøñþê¡cñ­s{XÃ±Ý )F„TRæÅÜ  íXý†WR´Í´ŸZL™·, µJ Ú^SeIN¶vƒ¡•{zÄÆû0»Ã‰ây÷›Š»?ÚB<0>vîÚþ’{Ýcw{$–:œõÀ?òsÖê÷\a%fÒøpËÇݾzõ_¢cñŽ×]L–º>»Ô E1MÀøÐ•醄:ï5yü±'Âb÷Þ¼?¨¹=DbÓf¾Ú©°‘û™]ã;/u¾µ;å~W,ÂÌ4¶áþ7ª[º"ì>Ü”+R²yטtþ‘Z”ø\VB„éøî¯þÝÇL©ìõ‚ÑǶâc?|zp‰ØÖ ‘Ϩa/W•÷©Ò P!iy#gAšg­.7ÂRjPät/z¨¡¼8®”d¾i“£qÇÅÍtqÒ$mÉëä°w#•Áõ-WµîâDÌãøX¯‘ÿ-I`GfWd¾Föþ8Én›ýîRÕ’k§Š­‚D¿_~p®iŒ) Óáu¿iOåíåTÞyʲ'÷sƒ°“ovzñ+ &b,__»5êëøÚ/aE¡ßHj?…Pömô÷l1ÒÏ2híeÝv_Ùqðpn}×­bÏú•bI‚!Ÿ\9DCh&†²_àLMßá§eÎϯÃQ,8ßO¦¼w6ÿ£Šê–Œf&kY ò£u%3ëÜ%|X~V™‘—'‰J¨ºï]b±zÄÇ ñZáP{;.uW^\¬Ú®¢çSýÅâ´Êú9/’œ6»nñR¦Æ&P)ö³†n¨eïøUÓ‚Œ+p~UhBîÝ+9٬尭 r‰yDÔˆyÂyÔ©”•×t¾=YL®º¬¦ý.•? çI8ýEø*"逈ü!©¹–·î-½„êü­”Âù†*uj*K5ÇaÈ„ />“ñT8·ë$œ¯ cwå…þû'?œZvLó, ðT†°4V_¸¯¿ÅGÞ£9¿¯{µÏ·vÔæ8Ó‰ẅ áuûXNá?]çE×¼¥ºýMÕ@ÏïI±0ÕrxF<\A´ÍåSzÆ…‚%alfwI·„ÊñvHþó~óŸãŒØt\÷b¶£°z\ñF¸fl žà5É+SîdN0-k½;)žçÞ[ lØ÷Íu¦è°uS¯¹Qq›ù5àÊ»Ûó ¸~œôÁ‘7¢ý:¾|_¦Çb§¥ÿCÍå´„ê~Ly#7cåµä4øUMêæ6¤žüÒq=gÜY¶2Ÿy#­›uáùœíöHÙ›—ÜëYܨ³¾”¼8›Ï`¾iNêuÎ^|óϘ’•…m¥¯ý¤±8õ)zL[*ê'Ëna)ÂüÜê´žõíO2%Ì©úp0q¢Q÷ Û¢ƒdoáŠ[œÇ§e6Þ!XÍ|ÌA'&q?[iöÍwa!]œ%°Š)Äþxí³ô*^m^RHÝ'¸+áù“OU`Ïˤ#‹òºdÂ{(µ á‘J`â§`Ï/c;mštl‹N_×IãQø š™˜$\«r›zqÂfîË3Û蕸%¹æH,ÕY”ñzüÞ„pÙíñ3 W³ðÎb}œæÈŽÅ÷‚šxAv²3«ÂRRþ›ëò8ÍÑ4ÆïŽÜäã¦Ûï:æ™=‰±Ý&xº°‘ª˜/—vC@ OP²•“ëyºœ‘o@FšeÃMºõÅÊØ[n\ÜÌŽ÷I$j„ŠÐ•0þð˜cˆ‚]¨n_ù‹Ù™¶øÑcg¤¦O£ŸÞêYû D+#äE‚ò»J?+{C¸Ðº“›Î¨x?ݲ+¡Ägšs0ö•Òr¯Š{î–ÉãGå_8Ù ˜¿ &YKÔRV m ïÜ †%¸+‰ÛYxõ¼Lµð½_Ì×e¦aQop‹øðB.'ßâ|µ!/‚_Æå¡ê‚ÓVMitþÁ5Z¨!"H—ÿæLý“•©^p²÷Ó$çrÚK)m7»¥€¯9Ëqo: “<9+,ÕH°ýjô°I3÷ܽHI1Ón©Õ.¨…ÆsK•8^v fʆW.†¶ïH4à±³ ùê  {¿ Šz’4ºÔ×ï¦XG_ÕÛÚ`ûü²>¯3‹&›Õ.âÖbBÂNýÌr4HÖ „ÖïWÔ|FŠ4¹`”ôóŒÆ¾§g§T¤ô;Hä,èž­>'}ãðÈ+®¶*Á"Qx{ù‰¥›üí7ܾüœ³7j\RÀšyΉÕ]s¹{o…œÀz)9ù⹄p8ªª~a´¥g¨iH3ú“ŸKÓ•É5Æu“ô×»3£ʬ’AaU%r³=`5ƒï$ìÈ=ÏÐïçÐ D´×°…ã;Qµº¥ýjRÛe³é¤WÒfûV1³s Ë"jø"´§%9°jS”S«f%„©z7õ¾ô%߄ɞ®†¨ðûOm°·óñô¥ØÖÆu,˜G.g`áõ>I[’¡‚÷W{ú½Ù’ð5cŠ û\>s3.{Ú'°‚)™¸/D……5® Þ£Œ=I•ày‰ù Mž¥„ÌøÁIûôѺ‡ß\¤×¥÷›&‡%Á¾Š*Gî­éUº}«»M…<Á˜î¡òÇ"Ú.´,¡‹ÁY]p_¦‹±èî÷.F‡îÒ^Š4 .™äú -Ä©è×G  ׄÕ/ÚßeaîO´y=Ą̂¸éŠe&(£3›a%Ò,  kaÉjœ‡ yˆ>Uñ¯—ÉÂz=¬Ðës-9½Ë'|ÑѪxöMKÈR½Ý^r§\/íÍà{lö°¦ô »²I”™9“oˆ{)u{¤Íž”AsÉòm¡€êÚ˜‹f¢þ¶f#&Ó]z µf'NïÒš«˜Œø:°ñ+UÕ¹Ëk§ü³Z äoc­Çöå–ÝõO>N14w¥*?°<Š~Æ$ÃÒ‘k=BõY¾o“4GèŸ&THøŸÍ­Tú±î‹.éÖA÷ž“onÀ“ôü?‰ œäˆúx+á¯ò‹‰Ø×8›Çq>ÐÕz¿˜@T×—÷¹}]^XÁýë é¹›‘{ç!»“yY/#E¹QÒ^¿ppð…I¢ùÊf—¼ÍùÊÇ,a½e…£eåiñÂuÝ76áuØ”ƒ·ŒRµ':·“ÆNCKîˆeœÅ’ösõŽ„T`€úhº°ËúèKâØühŨ^¦WªPëwËîM>¦ù]>—_ Gç]ìz•‹ÝçTIs|ßÜŠ´oàO4&7œJy$.J%4Ëñîs£°Pù¬¢*œ‰#öç DÁKÍ‘Ïài8ß ´´HÖšf9'Avž}SliåTC*Ø’Ý;Ùõê@íꈺÙn±æ }@úÛõyI¡¡‹­öí€ýýû#^&A•fš™W–Ä´³;ô¾év|¶3_…±?í¡¦L™Ñ€„3™6îO§ Y•7ídºHóÝÕÿX´€©£öÿ¥Bt¦gÓ=ËOÛ­nòݜΟ¼«áФÛ4°,kT`¯Øüå™tDáã„)ÂuM·þÆ“‰Y›ÁEÖA¬Æ—õˆ¬W°BÇÿ ›‘~" Ïyxÿžk+£³ ’ä[r?Eu°±×ïËâH±»8,”œÝ¯Žë¢2ñ<–uv¾_ß{JJ#™H'õ†,ç$0{´kðáú¶(Dƒ?²9&<ÏŠ]Wä9÷~•„¸ûóé 2ç÷[öWšQuW0Q ×€Ôe…|òRÅAÌ!©,9‹øuE K=৺|7™O¾N=W~·ðáÞªYaÖT þs‹xÐq,&4xtpºv’ý–›³hƒ0{‹¡«DF¥º1fv-´–ÜÎ+OœP¸Ý1š.”Ü—îæ„â6=ƒ#ûó!V.¸¦´Ö«#Ë7#UyŒönÝ‚NÛ°¸””Iœ;®ÚxžïZh¬ë”æÒyÈ>LñN¶ë¢ÑM!™‹éH›u¢M@'C&9Þlêso3ª«ã?ØIG´·i‚“÷+}.D}æŒtk©o¾Þm¯×¶“¡ìŒ¹†¥UñÜ-£ú1s¥E%±pA+ê8°ÿ‡‡ÝpwÜ~UŽ´}N‰ÓÜH)æž7¯Ï¦nvÇ»Á™×"_&Þ¨ßùÒ–R6§,»k´Ž<ºàÏŽï8ý¢çŠ\ijbû€éX¸%gç´/ Û¤õ›Ö ¶:³.uŠçkNåÜýb[™ÿÝt,d'$µ±`=º¿ˆ_áëÙ¥ttO³‰˜½[¡\ÙÝ&®…„Æ4ûŒ·ký|•›So!Pz޹²ÉQ¯Øñ“üâÒh¢ÜÖ-ϯ,‰+,B~šO©\¯ô¥z'^Ùøé´Hê,¶~ø˜ôÑI [‰aô5Âà^µn´³ˆOÑÁ›¬³UI„KÉGÈu …˜L‰¢Åû•êónÊl÷‡t$¾²RÖK<¦ m’Ρiì &›MóXɆfKIü”ðÿìÝü“kõ¢â‚‡¨UwezÄaøžŠ[7C—&†ÊhŽkCÎYu=IûÑðZbü²Q»ùû;Rqá£â'–±µ},Ÿ1.fÞŸžÜ‹›žUÎt·Lƒ³Gµ÷òßUUªÆ%-¯Jö3ŒøêQŸú Þ¹|U¬=—4´Îó›è‘%Â2RdêÖ£}hÚ^0×Ë9Øñ4‚ FýâÊ_è‰GsoÞØ£úb%ýµäÌÕoD§…ÇŒ¯êÍÔPdiMJIUOJ¬ã­fH¶¸,!´Kêô˜xýÀON¿o/ªŽÅ`iµtF½ÝþH~oÂûCðkâë6‹z¾Ã.Z~þº ;~á·-þ[M´\(ÍVn®âi¹KqªvCÀŠ™gî“Mìwb…wF‡n)%~ÚN;ÐU \±§Î <çd‘«WÀ›ëEF>)‘‰:¨‹x%Ʀ†¥Dsä¬ì°ð4°plÆãçdãXåáJ}*ÛYÔËÙ’F”Ÿÿ½ZÎ;ôª1ý:µã¥ÞÜ]9–Èš>Á „•Âe*Ì:ª;w^”ÕpöRþ7éã³¹î?´UÒ³ž/Ñ”îüÁÔ“…Ðþ±Â8Ö÷[ †âv1_VVYEwH@¦áZ+= ;îþ7ÌßSd´:U¢˜o'§\ó{Y<9Æ¡ß7¿2ËSu“²kV¸í•îºà_°veQóQžæ ºW×Å;•`£$ÈÙøÚt3Ö~Š¥âgwròì3A] endstream endobj 158 0 obj << /Length1 1384 /Length2 6018 /Length3 0 /Length 6963 /Filter /FlateDecode >> stream xÚtTÓoû7)(J7CZj£K$‡ CPÛ€ŒÑ¢RÒÝ!8bH RÒˆt JI ’Jüg<Ïóÿ=ï{ÎûžóÝ}õuÝ×çsóó‰©ÁѶ0…‰ˆŽ,”%©øù‘XgÄ_5¿)ãŽD£ÿ—ƒÅtšP,Á‚Ft=œ )HV$§$@…9¢1ŠM¨'€ˆtÑ(„;¿ÚÕƒ´wÀÊüë‚ @ r¢¿Ãj. E P¬Â…Pu¡aHÖç)„”°XWE ///q¨‹»8c¯", ðBbwîŒ'ø50@ê‚ø3™8?ÀØéþGo„¶ÃzA1Aጄ!PŒtôw\¨?ÎzDïý;Ýßè_‰¨ßÁP íâ Eù Qö;¤3p¬'ŽõÆŠ (ø/G¨³;šõ„"¡¶‡ßC`5C”0àßñÜa¤+Ö]ÜéükD‰_i·¬…‚k ]\(¬;Õ¯þ4‘Œpí>6ë„B{¡üþ vHÜî×pW ÒÍ¡£ù×… ¢úÎÈåå¤äA„á sø•ÞØÇñÛø[M˜ÀßÏí °# ðGÚ!T~îPO‹ñ@øûýoÃ?%*G°[„=EõŸì5ÂîLX>é °°ýþ}ºO€röùûïýJè@À"&þ·M]í ð#Ô“”@’Ò €áàÿÏ,Päß.€ÿ ÕAÙ¡ àŸn ×ô¯Ž=ÿ@è/9„ÿL¦& úÈ­€2@áúÿ†úïÿÂeùü¿{8;ÿ6 ý¶ÿf¨ ÒÙ篴X h Pÿíj†øCZŽôpùo«J ‚Êžf1´8PúéFz#àH,ÌádþèM~Q͉B Ý‘¿ÞBø_6¿`N„÷ÀË?&¨;lØßkü%#túgZ(þ‹w’2²(õ¡"¬ž É@ (áýÙ qKföØ¡1T¿Ö¬ °ý¥¢úGZ˜C¨û „šÿ’sðFÀ¨¦&Ð0¥`ÇÊàÆ£Wjì^bKÊäÛ©Gæ’b/Pb;µF¬â²2§oãÁS ðÇ}u·£ìO¾û}©â®ö‘>ã¯ÚsÛÆNœ%ør\› ­#zn–¬Î¥Xˆé$2àŒ¸òöâM¸}§?íCÁÊöÉ/†"°œnH£~óÛWE™zL ¦‹w±õ¶=ÆK2{,‚9‹.1AŸ#­ÂSôÓ¯ÝVn>¦Š÷*¿2ßÝÛ3sµƒ³5"@×3péßSìU-¥MiŠrÓ™¼Ë'9…žëét~¶ÚôLFçœ"ŸïýâLýv¨A(“÷¡ÃË¢ÝÇÞ«E8¦–Á,ÄÄÍrôÏ;è®{Á€Ô‡õÚ eïìλ©Í!Š&‚Vç9xîz†»HNÎi´-M츥Ð`×û8Ž¢‰4 m\*kÚøÿ¸y‚Š;e½ì±[ÇåÄEªÊ¬TZ°ký]*™æÂF·ÁjË¡U/Kº¶Çs˜õ&Má âèÞë$k†»ƒ )gø´vX¶p³¸¢¨'¯€‡-2¥ªTøŒ©(]˜í§Œ¶%#” hÕtŠÔê Á^K®úýêkS±\W‚Ôá<Ñuz!¹'N4yO=ׯ?zªiqÕƒºY'5ü’ç¾½œ~ßl5! A¥vë]©ºåý; |±ªiB^ïÔ"„Uìg+k²Ñ¬<þµÍO²Dëù~ß*Ÿûà‘½Ãz9#œJøøÎGÑ>©<äⵟ`šðkåRÜ›Ù|šRj@ªVò¹:T9yŽ¥öH¨>¼/Òý~»VOxðbgéÃiüÈ'ˆ œ}fãF¾b”¸5_Èá·B´)¾aÂŒ"oIc(uªixÓÉÍ U%ß%±k«²MOKíÚ:ïzµéŽ®w¿>ÍÊ’€6•ù’Î]mŒŠjqÌM~ó3D,ÞS8*@¸ÕŒõ}<(ãc"]—_÷a­+j©bBœL-´;zµ£ó ª%ææ¸éÇ©X8·â*ÜÊ¿8r §\ºbK!å–&/÷xÄÍèXŠ‹Q• Q¡ã}leº­YÒOö!¬[#Ûîš7¦“ãK‚Ö7’ ÖE[(…0m¿æ£—ô÷QR`îØpí 'ÊóŠxÞ*ìË1dyYDׯ‡…ø†FãÀ[ŽÛJˆ”|Ú˜€[Ÿ€ÌñÇd9ýâ5b%:d6 •=S‡î²ú‰5Ë ·°°éBbÆÔ…¨¯’>Ênï«—BnT èw¡Ý!s|3c†‰q†u×ä "­<[Ò•úxž_%ÍÆn Kš,¾b|-¡¶Fåpæmà¥÷Üw5òiëY_êÀ¯' $ªÅ&éË7ÈÜ$M+ö‡`Ž^Áý[yÄæ7e¶#É®} ?m4ê’8mñŽ_ñÂf#çٻωײ…_Ž1†"ÉÎò é+D÷+EdíE%n½ÏMç¹b×XÔ©9Ɉ·:í0ðߊ§6&ò@ç„ÿœYzðÌ›­ÌS!¹¶JŒÛm.Ì´ ¦ËVÖ³LrS£oîb×R\+»Reñ‘åÏ®Lò.êõT×ð£(pÖw\Mo©i/C‚kX”r›‚¤Oë(ÍÁ–̃尾Etyý¹çAÓnAÈåy+ÓjÉm!~=ö"}¹_TjÍ&ôÚ™—±½ÄûŽË©Oϵ‡i„Ç>g³9ËÐt¤3J¯¯É>ÇÛÛœ37Öíÿ4ÌÐŒ×SlÝÖ¥:®2*t3Ý8ÁÙuÞZE˜,mFÏàµ{“ñ¼ñáò513‡ìç›âÆqK¢îd¢kl<—».Æq4W•Æ`ws!©£œe»nþ·9e›¦°^åk_¡Y –ùC"Tô_þÈŒwÞèßçòq¾@>âhÅÜ÷òÖá‚^ùAì.,}½«t{<–ä3ðæ:òGj0SD˜ ¾|„;M/à”m³žÝãq5LrÙƒnÒälõ¹ÓíÝqàlU¡wXrß%®†¹4ß2ÔÔIâ©hÃé2߆HLêÌ;t“^F¿îjŒHì-öù¡·ë2¬3TC+a¾v«oE²i´q^à”§ü[ «pÇ©%¢Pì‘éHÕ›µB¾›øÐ­¼Œ¦›ö?ŒXcî¤jï9>deûGv·â¹œÃÖŠG$MY¼f§Û†˜w¤2»Ñîc—oK»²G:[áù"{“1L…ÏÃén͵ °|V³˜ˆå-¥COdo‡ «hãYjJ¨3[‘µåóŸ®wT¦:L7ùô‰Æ6ÞýNÿ¥æËŽ£Ð>ÏÍfüQi¼A­Íï>^AÕè¦$WbÏ“WµXȾôìåt#-ã%µ‚˜@ÍØ‘šXAôæv˜ÎɸèËÑžÞ ù-¶–Ä%Æé‹EÁ~ wÞpÒ8MhUãUÇÐáMDêz¥Õ­ºŸs’‘˜Ô'¶‹[=X𨹻¤Ò×Mc9‘nö>nåÂnŽî è¤?ŽÓ•Ù4`™ÛV1ÛM©±ÿÌ÷x¥’yšmtl÷šû‰ÄÍlø¾Ø‰tm¤¯Gveߊ^Ÿö¶(¹rì¶H¸IQÑ(å$ªŒ‘Ë“^å¶PÆ;Ô˜''¡‰ÇÜÙ—›šÍ*ªç7•nL§“©pºcïö6ýýrÙÛc¬v¬ÛÚy!ˆGIÅ ÷^R¯©´2: Ýë}y1Ñ)禓××$ÌDDGÅ8ÃÏž2Ç‚k²Ìó·iÁHþ›37ð‡ã¢6·¨Vâ¼—›ÏÖqÂ9Æuze·2J9lÃMÕjQ…ËÔÒŽ¡a\&”N´~¸ìש-¨`½R+°˜¹öÒ~B°œÛ³Ígˆá«µÓNºûùŒÉ{Óír#S¾ æßÌWò¹ì·n‹ƒ‹>.¿õÓ€Óî,y/l¾þ0èÇûâhÔ0£=Ö?ÎmôøeKóºgªoÏLx:o\ö@33ßµã³ÜvµÕaú‚ ³>‘ X°½‚“{Δ„~A²‹ºÍËhaã¯Oâ§`$ña¶-Ñ86³¼t¿8œ ;Þ¡‰ëãåb ÛSmß@åe Ja0Ü\d4ÿâ2c<³ b7Ftµ¿$4лVÃÊÍ_¹hðUÕS&|PË–ºó؆¢zÚ#>Äqmð^± ÍÝÎ~&˜¦Kb~! 2-¶1üt5píxv2“¨êìÐë1ÙÈ'2>Ö%HÄõ±8;*X´Ö:KÏ&ù#cû>±>°Q+öbÇj‹Òþ»ÂëQ¿f‚W´‰[nPìyc>¥ñïê P"¾Á^?ïw®óC3}¼Hv!E€§zv)Œé—áâÌá1qdU57§eì pt²š'Ÿx¤ö§º8Ÿ6^è´D Iu¸˜Ò ö*Ò¢>XoÔö!æUÀ+°® 8LÀp×fðªx΄Ön¯áË#{q T{ƒ†ª=Oñã~ýçºZ îm •\ `íl¬yàÀ°ˆüh^íÓ§ëø¤w•Òï˜)Ê^Ò'±)¢g²sA;ôÁ-»W|O$Ib,{XÓn|mÂç3lx¯.rh(šbÇ-?s­3vá6jFúÿÜìyF*®Ç—ز•¼1í|F±ÔÊ#]<)îbýÑçc@{ã‰âl{­ñ«Xd®c}|’”¢I¸Q*ßÜ%ñ§?!S 5ÛÖz¼œaŸdÎGªlpŽs¯«›|Õýí˜I=f^ÐöÁZ+áç{DE‹7)UÁ?@]×!˜ÁëÂ2A%Ac·^1Ü¥F¢¼¼ªƒ* ªœ:ødk¯Í-+ù)fé\¯qEQ¦5õ†„‰Ïm—Ë RT‡ º4ž¿pÁí%Ô²Y<È–…8ÕØ³~{T(Y(ºˆ»wDÃö~¹4)}Çfè‡d«–Mrúç9">â£F³ú¿KÌ ¥Î Ô‹ßû؉³ï¼-¤y%VÆtÑÕüíd,úóBck£ì“×O®ÅaVŸÜ¦ØÈ8¥M¶3ÉÍW‘`²Šdyt¡‡ªGܳ=»žLõ¸ï IŸÝäéŠ÷¾,ïäãc‡ñu-–gÕíŽ|rõE¹KÜC©ÍÙ>$1Œ„É·pÛæƒí¸ì×fÉC¼%{ýh“ӣФ•Š{×.”R7~›ÀÔ1¦çû\ƒÙ=òxã½oî¾úf¥R*Z÷Q£=k}¸FÅ5£Ž¨‡kÌ!'ëOr´ÕâHŒ‰;ƒ·OâVüßOXkÔ£Ã*¢“>í0ºHYä­£ð0ºû{Fµ­<Šzà3!¿¦Ã­){ƒ¯®¹Ùðo*Â]'!q£”&™îQU'DÙB›Ãñf ä³Zñaoüq9ñ×+QAÕù…Y4ÓËr7'çwñá·#¤OÇ©ûËS³Õ’¾eRÇ#Îdƒ¶{º7<K}u…"Èl›C½ÉjѪ{3zÜô€¶³ê×:ƇâVÌ>TyšùS ’p±RÃ/³_É6ˆ¶U8SW(p‰¯zò0õÈ-T„M\?¤óð[ýðÚìªBúw6Ÿõ¤£\HZ‘²üÁ9?lï㥟¸Ï,CÍ)Š${ǵ¾C\NY(WÙ6S6£„+KJƒ0¢‡ž8•Ç1ŒÊYI†¼;»â}˜7OqÎ΀VÎugúT}™Äžž$rÖ«ëÖÒ—ø5Ë\Z‰P@WÍU+17Âsˆ¦~Z ÷ò Azt.ŠŒ¹/N$×U¿ˆPû<º•—þ3­ò¶ÇåÚ3O&}˜_³-±œ@x_1íwÆJ©Ïx—þQChK)Î<`¶mu8(÷Zm[†·7´§›âñûK¾Ê$ì[¼«›Ìü-á4ŽúÏCê0Ñq²²s…Ú%}œÖL,\²QÉzÜgÏxyÜä«´kJˆSOŽ7vv·ê5àVÓœ"M×M8>eÞÞšìLÊ <>F½·ƒ£m6¥]×UšÖ™îï s<ˆn4œU Ï/zXœ»31ö£®ÛL¨-ºeeÝÐZÜ󑕹ʱPV´c¿Tl¹Ú‰µ)´`T¢Kù°Xýãŧ.LíÕ‚"b#G]2äqWw9ŒíYò – uÝ!pš°ÏT%†ãw³†yïæèd‰Í»sòÁJÔïv©Úd¿î$ØEW.Ú;û(ÕÆ´ÏGêÜì g‚„»Ga§Åa{t"rR…2DI:¾®ù“Â3I¬ÁSïåÈlšû,i>pr€»DêèËïÝOˆk¢3Ü7yÙ-k?SÛº×zDœ‘ÜAn{—ôõsí3ÿ”>µUºë%Ðи-(ùþ×b_¢gÀmµ³ÜÂW~…öv\´uQÇ–Å(GXóðì«Ó!Ù»7‡9-œL(æIÂÓú'¬Osü,w'{_íGMY=gëSTXPyζ¥Æ¼Hªžê'Qki|OcB,R©`‰„ñßÃ.b;c§× S´r“nZêFxéû仿Î=C?n¼Fr·XÆf…ÕñìFÿ'!Ӏƽ:ü‘ÇA%0¦¸Ñ A Kº—ÍT|ô´E„½ Wá¸ß<]È…Ô[%™f©kÙ˜Öðˆ„Þ¹n\ƒã&±ÉS1ÕÎèì±ÿ>‰í»Ü+èn%F¶¦f¡§IÞrŸ~CÚR¶·éKÉÞyw÷±ÁÃya›ŒŸ4dHÙ%ã(uß…å,CSšjGßö¬ßÞ:Iö”h«v=®\(å'£ë¡x3Ý2z'šÖ8ÙluÑ“%:^G†ß³=cá «ÈöA,+ö$?UæÌÛ ÝÖpµDî}æZùDfTE‹â何î~¹CíûM‹G%â.«'Ï$Õì&ü ËÚm´W삾<ä.?›[QRÖÖå~²6YmäsÃC¯|âY·[W…í÷ûysµÔ³\}¥·:0»>Ø‹¬¯§d– Þ`»§ ;ô&{$/ôP,®€Ÿ´(e¦ß3‡XFYž’WŒ¿åeíXl6 U{9/6äD,+hí·Î‘ÿBŒ¢äçj\dŽñwñ¨‹ØI%¾_†m_½{ít¹Â#°r‚‚ ‹\B¯¥‘?‡½dʪsï/Të,\aÈò à‡)ç×±»¿i˜Pß+¶ÆeN¤–+t;Xž±\¿[ni‡;ÕL{(ø`*8½iTç‹ø·K”Œm ÒK`Sszµò„ý9w¿&±+¿"ø©ªÝ©ðë>ÈEMV~£±³á™¦h([¶´•®©ïËd¢‘ ,q(sïžjâFÚÑãåä8u‰7ĤÆÂ…×rpý¡†\¦”Jòb–•}z»Ò=¯ù¯Le&¹ÅU­žl¥Uíkñˆ ô†ò¡Î WZš‡üò}¥ujÒƒ´ù _¦fSxóê².|?¬A>’•N}ü€È™Ã*‚ku°m”T(“+—¡IAîr ¥Ê£¢6¡Ió¢[Ö]ÛbÁ <t5·Ä؂䖞Jrö͸(¨ãcx@1Týà¶«­ùc†YÇ#Èm‹õk¼·scÞÝÐR£ý®~'/…¹ÓµA’×Üg¡öÌ•žYxoçÕ¡lÒdŽôÁˆ‡bÈ61ê}-é븇ó7Ù_»˜˜—#rü­y£>k†¯Œ«¨ÛO¿ÈÏ^SÓÈÕ×—nô½Q¢tÐV"ë­%¨Vs£{AŠóm·)~¶ø‚K„$p:n$ù,NÙfŠG'¿=ã}߯T/óÏâñ‚÷Š5¹Àe·¢î²ÐµÒ‰Z|Nü®$ÝŽšUÝ~vµ[MR(¶},€%®‡ò^oŒ&Ÿ±bÚêŽ}€ËÛ¨òn(Ž8åý}os™M7‹Úl}ŠÑ€FJb¨¬dºhe¦;BõG%šAêO!m¼õôH¥.7áÓ1»g¥>.&9“ø>òÝxrI˜®Û5&\þýaKåÉ‚bÁÕÍp´ìVI4ٷІbËóBB7ðçzç³ä?swŽúXâ´¾Þn}ÆyÇ'9v\¥¾ˆyl^?\ZUãYßiºy—¨†´ŽO¾ý{Æø°Üˆ~–yâPh>“O¸ýpÏ¢³*?“6Ìbâé5›šv¾{Ïåìp\ZmQX"@÷”3tÖèu7ÓÓ\Êw³èMâ!d$hÔòŽÄ'«SA½1µ³¾3™ç™•×oòv.h2œx.–êi¨}?¾‚íòß ƒÆF$û¬ìDß–Øb{+Cñ9øMˆÍ¤Œ¹†+A4ùÞE×I¥|zC{Õ ¢|8M*}d™v_7[õæYi^5T!ù¸ùöu¶uüRgŒ©P…J€s²4ñêpï¸(G”7‡çº_«(‡œôeÇ#¡u!&õÀ[ôêËda¤e*M½ù›çTú¹×–y+òìC»ÈÉÙÀìÕô67]¼íîQûN2lOžƒŽ¿×K¤±ÙjnÅŠ†¡„!² ìÞ4zòï׸³£îÆÙ—}XúYb endstream endobj 160 0 obj << /Length1 1390 /Length2 5891 /Length3 0 /Length 6849 /Filter /FlateDecode >> stream xÚt4\ïö¶QR´D‰’Ãèu#Zô½×hc F™ÁŒ½·(Ñ‚è-D B¢5z ‚ HDøOʽ÷ÿ»ß·Ö÷­YëÌÙ{?{¿{¿ûy³¶Ÿ¬ Ú¡„Faù ü`q@^CCEƒ…øÁ`AR66}$Ö ñ×MÊfˆpà Ñ(ñÿwCÀ°8Ÿ ‹Ãi Q€ª» "â»â`0 ‹ý ˆv`H@ƒPE£R6y´‹·Ò΋;æ_¯'œ €ˆ‰ÝåýÈ:#Üp Ѐaíθá0'@ G"°Þÿ(Á)iźˆ xzzòÜ1üh7;).^À‰µt„›Âø50  sFü™ŒŸ” зGbþøõжXO˜À9œp ƒËpGÙ ÜÜသŠ: å‚@ý«ÿðï€ðCþ]îoö¯BHÔïdŽvv¡¼‘(;Àé„´”Ôù±^X^†²ù„9aи|˜ 鳯~w”dunÀ¿ãaànH,†ƒtú5¢À¯2¸[VDÙÈ£(,†ôW H7wíÞ6ëˆB{¢|ÿ¶H”í¯!lÜ] PHWw„ŠÂ_ÎEúŸ @Á¢w…D…„+€ð‚Û ü*¯ïí‚ø„ürã&ðóuA»¶¸!~H[îÔó@X7w„ŸïÿüÓ"…@$ X#ì(ÒÿTǹ¶lÜòÝ^À0Ž{üë÷ï7s½lÐ('ïÿÀïW@CÓ@GE•çÏÄÿŽÉÉ¡½_>Aa€O  ¸‹{ñûgmòoàÿ䪠lÑÿ»]Ü=ý«e¿ àü«.àŸÅ4Ñ8Ú"Îÿ°Ü ÃqÈÿ7×§üß(þ«Êÿ‹åÿÝ’»“Óï0çïøÿ†9#¼ÿp¬uÇâ ÆéõßP#ÄÕj lîÎÿUÁÂpJEÙáØÌæ ÿñ#1JH/„6 ·ÿÙ?~ƒ_ZsB¢Úh ò×Ç—ÿW '0¸#î‚ÁóO†Á© û{¿lNOÿìCGÛüž T€¹¹Á¼Iq«ÇYPÀ‚S¨ Âë7µ~‹Kp3û¶h7Ò_k†Š.¸Ý m~ùIÿQîîæ†;ü7%pÿËþ­p '™DÃ%BjB›Žªeé=ùVßKn§ ò½/´ Æv)ŽZ.%é=ÍšU+Sšé„(Y8´hʹe/Líù®ÔÞ©ó>໣´nwÇ:aòâàÒøcßC–I²WxyF©rLâ%n]xÚŒ1ä­$Ò6v]zld9j:¦{²ß,Uº«Ö¤ÙÜZ]š¥NÍ føuYûÚºGúƒ–#gÙ9>äS¬YTšf‹šdó1i’gù⻾ž9ŠNƶ˜ UàÕï¬áX E‰a¢*ùüg9%_2(}­•©ä©õ4ò˜uiI{äó“_oÓšˆŒ²¢ì“~¡%{›Ÿñ¹È˜v,mMËg‰°‹öµ‘œWÒ l~=Ñ7Js8C¸Ø·âtµu¸‘3 ôÐþyén€¿¬^ŒCz%Ü”ß(1I•×IÉí _=|­ I“ôÊî*ÜMo7°Eï霊¨§íz[1y2”^‰'ã£wWq\£õÈi‹sÓ‹]D†ç‰h—2ÚÇ0Üúñ£Œ’)jò8»âǤ,gI„èl©o•ft¢×µq¢ý ¦›bw07îÝ϶atõµ^–¹ó‰Ò$0oä†X|¬Ht‡•Û5Á÷¼£qÚ*–Òœ {º…‰äøÄNh,º×ȈGAûãì~uÍЛ¼ô´W--V/ä)„îþ0tbé œÝH88¶&,› ÑDh3ʨ5³uCEìEÅʾœîççºø|ÊÍPßÎTz`>±’ÞÔäü€Þäì oýx¢Î¼#ùØ;ˆ¶Üµ7´šRl©¬œΔsKvºäøzH^3chTnI3?ÚØÈ’RHè°ƒW ŠA?·EiBx+gOoóוù®Iˆü…0h]ly¢^Î?­,y]!FÅšøçþË«"¼îIÌÅ y‡5÷U4²,Ï< Ñx«l=öy%=:ÈKÀëL¨±äBwÙs§Çà uúÐN’þŠ7 ÛI7— %aI¯OµÅ3ëN­e²ñAxG4Ÿöæl‡êb*X+ûPf®]$-UêmUñ¬ïBž¬ä Œ'E70)kk›Ÿo°=, ü‘=òòÉDÛÅõL-r–ª¯ž†ž5`Õ'?Ÿš[ÎV+6-Ñ×³Ý í&Ó¦ Ùõé`][Ü¥à`Ö>xŽøÖ„0h@H—ÇÞÿ’÷%!è‹ÊóeaAµÐgõ!uΫ›óF>üôùv«Ìq²—oç=òx$–† ¸ìzÐ?ßí­ôÀµ}†¬»= ßÉ!Œtã`µïqÖC<—Ãè“b ”SI5}iª`M™Ýç‘tBýµb ßÖßÔ šFÙçoéO,¦°T %Œ½¬v%–:cyyÏÃ*6ëåLt BéWüZuî6ctÆþ‡ÂŒ°Î×1§LU‘÷D§žARrM¶ƒëŽ] §I!£‹ZÔíL‚‘Û6hª¨x@Ñ·M»[zrÎñ¸ï<î%¹š{§þì­Ò€F¨Œå,{›pÜ× ©)>3„’ïÝ«y|åüðrH›:}Ô U ¼q:*µ©¡KsíÒÙ0„ËÆ5ûÆ+9|G75e´]®Ä$`Æ2¯&5·áõøD"ßðY¯Ñ­nsãgÒ§×¥‰YðÔL_E†„ã9Èèˆr„ ±ËÆ/ƒÖ_IÎQߘ>~ó%ÅqÜ÷ ÃgŠŸ“çìêæÖ©BéJÉ;K%cqç•ÃÃÓPüƒ§tâ þ¤÷ÌJVöÇÊ­ß’}™)[ò¤›¯{ä½—wÎ6ü„Ù×¶Ì?ˆÓó¶ŸFw¨È1•Ü'`üÙü­/] Õìùè~j9°"ž'Ís¯û,iÙ¤&;bàÐ˽^»ª'#ƒ*ÃúçþÉìf'‰œ$W|æõ8#/¿ŠV-X8¬X¯#BDƒyªÄ¥_í]¯êb¿Xáû®øÖxWàAÓyG[¦OƒŒÚNs¬-h³ñ<€èÇF)AbÀ\ª¦“SeFÛ2—oJžEÏ< ï¿.Ìvøáã9âùÅ©rŹæ™àæmƒè $±`•„q¹ÏŒP‘]ЧÓç Ó(; GøÁl•EX›ÝóŸ?ûßZªm\¾OÀå·¥72¹µ5NïÍß­H¶éõ÷0<ä² ìrR^2ž>î]©9Ø­Ëá÷kð½m^˜0éD[YOB3RBÁBͪã¡8:fø–a±Û$G¦«ÿ³›Øñعx—®ûãÂ…œ¤c¹³1ô-Äâ¼êÚŸM9ƒ íCŽÇÇ!å’g?L(r¨ɵ %eùX/×$pôÎǶ‘k™Q—7Ë©È_^ ¨~è+ºTk9Öš»W¨+óB†_.ǯôrQ¬H~HP°`_~¨Vi×Oú`º†ëækI†šïdWØUÆu!{§ÓWãfçeJ[‰úårèX¦¾Ê'YgÑØåλˇ¼3J2¶¿ßý\k™MîæÏ€éy Ÿ¡¢;@Û]×Ç1i»×´Éq¡C½õ5N<É­oé ø»Y=‹¨f{àp?´Å;1æM„Ž•\?äïß;6xzŸ!gv£XMx½«We÷æ%C³$ƒBÿrãhš‹Qæ¶¡¸ÎÂÖÊ‚1yw¶vÍÀŽžzNuæÛ¥ƒå¢×˜…V•fºÑ§èmQÊŽEÙLߘi>fBžÔæÖ>èõ±×XÎíáOÍùC$óø“8^#÷®òYÕê|OöþƒÇ ð'ˆí±éŸÒ°¥ö¢ZQT¯º ÌjÐ~Eùµ*ó|¶AëaÜÚµÂ%4‹%ûîoÞ;—^ZµÃ7©càßpï-иíÁh[üµÈv€]ót®/T¹öÈ_fcNZátÇпà)ºÊµð[ª0 ¦oáɘNêÉê°ŒGó»Væñ ½`QôÉh [ 4ì£Ãß便¸}ò“ŒcÈ Uƒ°Z»Âg÷ÀãŒËD)øtzÑ&‹ä‹dö¾SÙaCl-»^‰æ!‰Ü’ÉyW™®XöOòü§(£ÂÛ»†Rf4§`>ûzdK4Ý7?s¯³`]Û.lyFýýzáé¼<æiœ¥‘L¨sýeÞ]¤VjsKŸqÉÌb2–Ý—(Ð9šßØh‚2ls½ü*x w‘Ù8„.þzkðrç™å7€¥\fqe„Ê|„,WU87bsÔMOñÅà5¼JÞ—”àÔA±çÅ© F?•jXÂ#ä/eskÆÓHd¶üEƒ’oxa=²Ëø£©l jY¯_µðêôuÞÀ«µ }r´dúa•wpç\çô§nMnÅÐlýåîëQ‘d•ÀS¶ ¦P½øx©Q9?vlMâýÃoɛբï/-õ{¦æä²^µ}ž¦“›ôÊ/³µTºÃïFó@WÑkÏ>¶¼h—u”)fè˜YYɪ¿PâK¹ÿÿƒµÕó¥/¨À‘Q0esÑÛ×q.™CÝîÁóäZ=áLZzš™x÷y¢Ú=až˜+±7õL]¿»XTÒ|ŠvR¨\L}æÓõœc§ˆŸSNo¶ßý òùÞÍK«¬>¨NLìIt6š—¡f1©9üè¢Ìz'…k±%~]'Ò­ùñÉ àéÝàµOäý‘ÜC²Ê¥Âí·çG×·³îY Q‘Ü#ç6¬¸ÇÙ/šâ9âYõ¾»!’fS Ä)W,¤KeßZú %°àvèɺÿåØ B„‡bêH'¯öįµÒ«ÏL²+“¡‡=çÀŒ2Ü÷hò"Q\ëhšµàJyã|y4~l/ë{)ëIZm#͆©Gž’ÜõÊi¢‚å- Ô˜ôóÐ;áÙÐìbG6š½2B™fbFØìøŒªI}õCŠ€ïlâ[+Ô£™´ÓÃãÆbû|æñ¾ì–ÇkÛÖwý|ØÃËAÂæ¶·oöÞ†rV;I>»ve´UÏœªúRî˜Ä‹D­®t]‘ÝæÇC?Ò6åÐáIé@Hê#6J~Ø%aÆ6¾>».–6iµËzïVW?:ÂÞj?BsùÀüÂ¥f?‡¦;*oOû+¤C[v ãh)|sY•fgËÑúÇÏI¶;¿1T–©V£¿F[\îMrn gBÇ4ÇHºl©ɼ®ÀcëJ›ŸÏvÄCßt×_™‹ ¤'ÜEÎ]+Wè©‹~µº_)ì€ZÔiÁv¾ÖR:“‰PhÈ^b1žÙÌ|5p9' gqÜÆI›"sÅ Š%£Ù¾ß¶0¿^˜ &þT×hÛ6éÆ;¹bƒÇ´·;0Çò"ô˶ëÛ#žtÌ™ôUTa)å[ÿØžc…$Štõت]Ÿ$ù "+æt9éQ¬w©¼bÿÏÕùÓÃ^å£Uª˜ÃLæ’Ýõ3ÎaÆ”ñt©åY;Œùá{QF+‰LÊ+ãÔ†x÷^ÍÇÛ;Ö„=}¯O¤zt`¬AÉ":`1ãóŽxGY3¦ÈU¦›r­…9Mär—gýN^ØòÎúÌq¡TŠ·",˜ÞfçF«{`8›Ý°×IˆíwšDAN;ÈùOÂ5vš[ ŠŸ.‘Z±õ{&2¹÷é.Æ­N'"•n³Žd˜©CûòSo¾?™=À‹$µ-Âh'¡Ð:8ðNN‰ Ñÿ4 –þ0îÔ\k’ðU²CÅÆL-„œ'2"ÃèV‡M±fƧ™Îا]²J¹ÞYZ ó¥‚&â]ž6uájHZx>¥ÎJWÒX¦²ý›Êåh™š.®Ï=6”åÈû¦·_ræ:F‘rÍÁcõ¨-„ëu-¥ð·êc7†cšè®"N0 »Zè¬Ü)BbÖ’ ÑîR–Óµúø\z„#|La(O¿sÞ«‘¦š¯o Ë_úQuxÕäjœ.!â¥OûøÁw¡¦#L=£KàðIëµoç‚aƒº÷¥iø<—°âP&y;MÚÉ´HñÙGdlΆ7¥œW¾üäðгNÿQнî¶ÛC‰×÷wt›•ôLz/꼯‡n|-³W6ew2ä9¯\ÉÝodÊ¡/´&Þ‘)«ï›ß÷›Õh…õ”ìšÐÅÊÙ£ÒSĹwJÖê¢et¤3RB^j+Ò*êí™UÅœ<Ûæ§sWrŠªC«äkiOöÂö4ìutçŒzi ¥=Qð˜6߈mÌ:8©-._R-ã~­¿œšcÙµÿ@6µƒ4²„Rõ=I¹M SÔ/-»½Ç:ŠÀ‹xÍO¸ù êNû~Õ„Fèü9°ã~Âí®Ñ2¨“š*~ÛíÀî㦲h,C‡Í êúøj±>9àvP5÷Éö··øRVníÆLŒä/ 9·0è2‚0åÐvÝ"¼°Vâ G]ûòIn!ovº«È#„øUj¨ÓâéÏíooÛn°§Ü:¸U™EW“qð•Tñ±·I&%Ñáv)ëôj{×|qëRÜX~qîVöÞ·€²ðmH2ô¢‡6ËLêVñØ}5h 2¢4g–m%[áHôNOÚáÕýåÔiq½k âæ<÷‹ô» 47Ûclo%𯋛õÙUìƒ{¶+Ÿ-É*£5X?ÒŽ:´B‡#Ù.æBŠg¼—š©Saú\tîúÑ/Åi)v+XWf;ߌ¿íÀ8wa¾gS|cH‚22£~ðꂈÄ'MÂFúÞú†›±Yf~·¶{ÜÁúã½î•Ù Ö¸ôkмðè Áßîò/ïøÖ t¼£Ø,B‡çB˜­ªÐ«Å@È{gŠÙ£á–®Òh½N/õ§­Ãê1*:©=çÄö¡ÝTÏ'JÓŒéô³Â…8…*ÑåSáÑàÞ‚ÇOIZ wßPQGÍR˜¼à¸—–ŸhWo³¨xí'柹BE±[¶ïpÏØ"éaÂýᲣرØ3’½iÃÐ-‚[Q…ñ½U~1!Œþ“×S´ÊËN¹«JIœ#ský.87ú¢$[hÚϸjz¤ ‚QjÕòäßC½>óy%X$ÅIîeäÜ"»BåÀY£Ù4lf¡´á"çb¶Íå<ì°T¦Ï{ê!Œ?ÎFÖJ4ÌIjPØR]ºP.ti:äŠÑÈ øòöÒ ’¢Wšûâ3I@{ endstream endobj 162 0 obj << /Length1 1461 /Length2 7099 /Length3 0 /Length 8094 /Filter /FlateDecode >> stream xÚwT”k×6’Š )ˆÀÐ!Ý‚€„8  1Ì ! -ÝJ§RÒ)H‡ !t·´t|£ž÷œï¼ÿ¿Öÿ¯YkæÞ׎gï{_׳ְ1éèqËZÂ- Jp’›(×ÔT<@ ?›>iù &b3€8# p˜øÿ w†€hL„DÇiÂa5”=€OÀ',Î'"ø@±ÿÂÅ ¨%@“ ‡ADlòpGwg¨µ ý˜ÿ`NŸ˜˜È£ßéYˆ3 ‚4AHˆú‰`=@†Bîÿ*Á!aƒD:Šóòºººò€€`–¿Aö8:ä‚Úƒ,п;”du ô€‡;C‘Ôþ׈¼¿Ê oYf)wp€À¢_ý)@!`ôµ»óþÙ¬ î óøË°‚Â,­~ a‰rä} ƒ:¡ ª … !¢0k @œ7° ï¯òúîŽßN¾_0z/G¸#À =Ä jAÿy @.ÒñòøßŽ[D||K( °€XCaDÿTGë?6zùÎP7€ Í=>ð×ç^–p˜½û?á¿÷ËûD]6ן‰ÿöÉÉÁÝÜübn~! €("A¼þ]Fý« à?¹ª0+8:ãO»è{úOË.1€ã/upþ]L ަ-ÀñËMB@0ú‹ïÿ›ë¿SþoÿUåÿÅòÿnH eoÿÛÍñÛÿ¸AP{÷¿ЬE!Ñ Ð„£uûïPCÈÕjB,¡(‡ÿöª"Ah%ȬÑlææä þÁ¡%¨ÄRŠÛüáÌüé/­ÙCa8úëå‚ÎÿˇØýA ‰ùÇB Õ†ü½Æ_6­§÷¡Ã- _Hrv¹¡W¶„|h…ZBÜ~SÀ˃#Ñ)ôÌ^+¸3ѯ5 ‹x~A,1¯âß–Úgñ·%„ö¡uîúáC/–×áM^Øoó_-‚QÎÎè~3 Ýÿìß/ Ä &ú>?°-h8-•¥så^é—ÀÝM<5âçîÏ~N€ìP2_ˆÕKKT/PúÞΧôܶIKÎé4}vüÐc¹‚±Ò]ð˜›QiÝšÑ"zìæs$ÎㄞyŒ¬#Ë0^ŽAüƒs†Îý0òfBiKë=62Ïåmq®ìTyJ"j ZÍ¥y©4ôbÛ‹Ou_ôW„Žî>ÈXtˆò_ 7 IÐJfV—h<#Šu-!Ÿïêù2MÑ~¿%ÌWÍÅoeõ5’BññzAüƒéw¤—\¶’)=,”oËlYvÎqÆŸ–kØ,l™1=tjO¯¹ÛN°£¡û*9+²'V¦/¦ô0Æt¬(6KåÆ×ß$m—åãVBÛ«yö:§'PN@¯axQJúµð½x!”òÇž½”ÿÀ­£Ó¿¨ÉÈZxÖ&q¿ÓZÏ”Si“½ëù5Ös=MNÎG™a~C’„z'éþ:B3Å£³„éxôaÑ:²›DÞEVx#ùw1´–æÏWû]à rY"‚tßפŸ8Où„x|]]Øø äõì(¿()Å«†xx¨ËI·>ë€j¥H{k5“¡¦1}[À¤ˆ Ã6<ƒÉ{ÑÏsXÒv’g}”ÃÞº+Єj&øe/”hžƒB»Æ"&ܵ/ ³9†&þxRm([pY¬€Õóë$·`Jê¦ÔÄ3îg¯v(ƒ#æWw²õø.Òê+*¹´Ù¤Lž¯Ï:ôËß¡ïáYÙ¾P@Î5z » >,bµHuÉëÕV}/n'H³Û†¯û=¥æ“ûpË9¬>TY¬'¤hΈ%û(È4J:ž±«øc²}+Áþ«§Mê3# _šö/äsW, ¡Zí>Ž"êÖðüKÇ#ö÷јÐm÷Å êýg2‚’«'f·¤pÝyb$”ë°uÁŠïú®ÊÑ Is’s¯I¯luÕëŽLœ-ʾø_,[d»Çps˜A(ï9 ¥ZÛg¾ÆsðTÝ ¡Êib&ú¯NO#Èt °B ÒÌÞãíú”¬”¯Ù®Aù¦Ë\Î^Œ¤ª.üT)ù´Z(±±f¤Óëjÿ1f!5‚#G§rä'\kÛ×…+Ž„Ù*[úÂ)´£pv1^%Ô#£oCs_@ÌW>¸Tny’<`L¦x µ!¦þJ>àqÁ-ülnŒSßÚ.+lê¯y„ç¯,?ñ¦-±µç7¥|ü· ãó0™ö4¨v݌̭ÝÓˆ‰zå¬ó,e¼>ñÁÖå¤à¡Ûc'ÚwÊ ¬‘¦$üŽáï·aÆb²H¹"Þ°gÅ6¢»ò‰—2À &«wÑÂ&¼CËå¿„ãÄã“8+¤·<)¨ný»«p4>m¹¥ÍÂÞN–;‹î;È„ýA€Á‚ãÆÓûyÀ.G0ßÝ'Û¤sŸQ4Ñ<¹œ­Ù>¥e È—©u9ÌÖ½ÿ"óüøúõØ«—‡(xðLà¤Xœ§-òq¾¸j.Ð÷B€Ò¤÷ O¯íѳ&rìŸ»ÖÆ×U*ß_ˆP²©´ç–ð1%ì¬ ¾7öiôÍœ˜µ^*¯ .x¯ŠñR‚_i’õ¨vÖÈ­ÆÚµ©”þÕµå(ÿ/k7ñn]kš“©6—B¿ Tð£]Ü>ÇNl‚“ÀVĨÐ"4¤@WEl³ttJ—>þ¹ä'~Qà‰Ì§;übnXþþΠ®ŠDñF }?V¼-Í‹ϽÙS?{ê'V÷žžâHÑãÐ]¾ô„Ú#öì7;8Þ:’A­‰=ç2çj»/¾àT—,¸Y +&üÊþBÇlRBžFac“¿,ô³¹&sÕÞA¢[Ë­¤,.h·|äŒìï’9* ùB{›NTëš«Rõ£IÝKº¤QN~BŸ¹/¢.zCžõ¤ ³ø;ú÷"si?c€X‰*ù¤Ž§S9ßó!‚Ö%N6ÞøQݺ‰áZh¹†ÔDÖÈ£¢ÉÄIŒC~°s¶Õ}§æÿqøéç õŒmR+‰L»l¡9€dlù«nÉ>`Bþ ÿfÍLL7ünAI¢9D¡Èš´ÉWðTªœï}À2lNÍM}…8¦àÊáÅëRˉ¸(ã¡Y‹óÀÉN½ â2Ü©.Ž¿v÷sáƒL[,ƒ.ˆÕ2kdذ«.ÊÚüñ»ú¶aÕHÞ8£P½h¬å'Ÿ¥A÷É·¶´¤ÖéÙ*ÙaÄGŒ¬Þ&-­Ñaé\ΔXq™‚^Zê’YŠ3'õˆs*0í®U iåA2íü)8ŽýQ]Õå™h»¢›hAÜ]­ÅŒµÇéææ„Pã÷g'6¯Fd–ÄÏQûGjÁNýQ⼸\*q?)~(õ²ÛäÔ† Ï5¨wuÜ}hFØg'u™ØÈj¥|ì¬ÎŠŸÚð±™*²˜ÅŸÅ/PB|"ç\£WöÓå)§`júR‰øšcå‘åÝ-­f3 ˜è€ÜDL}AØ¥÷Sc¿«ŽP+sž:SÕ1ÿw<Q8-}YT}…<„…LÄ;Q.ŠÔÓ^»`~^1»e7ÝÛ<æì'c€kût Hu(+>؂㠦&5Zï ¡ ]qM¾¸LâÍ]3§Ÿ"QÓ’y–¥Dÿì ùÍÚ;¶‚lO6±Ù”뜲 Â2œýÜÛ„²ÈV&úø…ׂÉ|æá'„Þ¸¸ãf´åœbLʆ%ï'… OXjÚÙ©CQš*”R(BxºT Ÿ@ƒè=³ÝÄ7»”ånC}mpªÍøxŽÛávø¹Ï‚+™oÙ‹Òà›„¥Z··´+¿9ä’ílâ#$ºê³²Õéb …‹¹s}ý‡æó¬z¼ÃRbÌÇ,äªãžËs\ºa£'þ0Ůģ[jn)_<³Dò×2ÄÙ¦íhWIÏ©g=tåklýÓ*|u»Ž÷`3͔ƔJ ާ}â #©»µ¾XÑ[מ7w…QÃæy)ÁE 9%2Ž™F v·ÙuÜ…E¾.=*AYê«>Ï}©”ü`¸Ã"ÔÊfùb{¾ŒJ^vÀ*‰Ð~_ÅW“8–ùñ¥YñûÏÔòŒBÜØSí­§m]ñ|€’~ñàYÖè Us¦ZÞ,ú®Ì<¹„lŸeåçØZ(ÉrݶÇÉzv†—ñÒ"õŠŸxTâGˆýÑe¯`­—„Á* Œ9*ßl;ÎÑKÅËšUŸŸ oªsdOós -»”v4_úŠY’¶Ò½ƒù‰3V'¶€Õª’pŸÞ6>^N~óÎÒ#O÷VýNŒô'ªm¿« Šåp±>“»e{|%ù”«4ÜÏᜰ¦$*‘á1ÐZåÀýrÉNŠÎÇüLâ’ÂW÷:Ò/}™­UuW·FAX"Ü&TŠä«Õ2ùÏ©_ð.É.««©f¿ú"møšº‘¾DVÙêˆàÜã t7ê~Ä[й µrY”Öϵ÷¤xÞDõ,ÊÁE7rÖ´r⦘dÖèdd;kˆå¾Ð;‡š<>le!1€¥eôL"jjðiÿÌ ´#"ö­o¯£'?P;iøø.…Sð“óŽQxÀä±]‡H·OsWåi÷›ükÎñƾ¨¹ *ÖhÁD®>/7½%âó9ŽN|Ó½ÜdxlËLMö-7ǤÝ燷ó+·ÇÄù—Òå‹ÈH°zœ™[ÞÝÏÒ¥²Ÿòñ»Zÿ»!ã“§Ë_±GO3ö@žg‡á47Jw:°˜5Ñ‹õ¼¦þÊÿ¥_R¶á©ÞÛ\)ü[XÍnV`ê;^U²Åì•a0btáír«¤ŠÓl‹ýgøÛâµ- îmÔÕŠaÀ§Ù2™kM‰§÷|ãq‰)‡ñy™>$\ÙÐw0”Ú+ö¾š{ðÝ—€ë À-‘ôÑY®àX¡ß¬=E/8+QLèTÀï}ð®ûµ¥'ì– VcÉÍ»7ãΔ½Ä“Ju.Ò¡ôT%éÙ°g^"¼±,Æ#bu„áN‡ÉÎ3q¾óŸiaÛ;kŸÄ+C·Œ£r»ç‰‡©¤&¼Õ‡SUß$y¸LâXånëÁ/ãý%Ãx%L]#‹'VЙJSSvꆣ1Ñ9€;uñmßCg9 xÛˆ|DϬ=ÉøÅÎ÷þHbª Qœ}ÛÜ® ÁMïGÑùÅÝ‹ŠìõRV³®z§%´å0+iרÎJmÞº3¤áøzqvuŸõÂ÷©á. xAÔ‡Ít)$¶dÓzF²¸¤K„›Ä!uÖï6¤Æ ¯Q5sPR œßÁªËß#u"ÏvÑ’ÑiÒîи*üQVé{ÿm•o&JrN£Äpc"Ã˳åã±ÈÒ–QìQ>¯F†´[ÅK7Õùü7±U[KU–¡¸fáor©sgî²™&úY¦³~mJHeãaóCåëAÉi éô1{¦%À*XÙÑ×d+pÙ+D@̉³ž—Qúú¤Ul6‡ÒƸ‰cìpX[¢ý*8k¹Šq{ ^Tû}z!÷¤EŠ™¬±èJͶ³é³‹–佈œ2Kï²7|€”ûêž8·C}þÓSFyŸìX{›p$’¼Ãu–•Á,ᮢ~š?´9êÙ¥{ÚmÕ‰íåF’;ÈÑá@è·«ídìË)z"¸§ñvÙÛíù¼õ²'ƒ±šü>ä7Dúª•$°ù›ª›7[-ú½!ØÉdMĻφ’MGh^Ôž‡Àbæ¿1y솬Í-SFºÉ™åwöØêxÓ{<\ª{_R&•2ÓäÇ+Z)æŸ˜ÕæV–¨­I¦9!ð’¥P¢êÛ¹ý7;5æl›œÇ¢OeF 9Ö)¾ã-M~íp1?ÞÏd/PV¨w¯äÊù2}É’à~‹ÞU8¶S7Ú4Ïž²u‡ ><÷ræ±îñ ®¿e Gù«.;e³h±Nfy›õ¨(ÛhÑÊ—º®¤nëòs †@§Ó6v•TÄí»¦UÜ_Œt0÷ƒë¦'›ÙÊÚ&Yý Æ*‹¯‰8n r.T¹?°_/÷›y(Õ=_.­¹EøîM]ýŒŸDÍ„˜ÍGà1½PœØ¾ÆÄri>ñ|öQzåù`‚‡öx’ÎW‘9˜ì,  g‰÷¨Oûor!‹1/½îÙ[ˆ m?S©ÞHÐOÉ 7IVâhc‹˜Áã_á9Ü\ç\»a|M¤7jæUç›,mTrŽ}€;£·ÂîNÏ£ "žÖ˜ ¾ih›J`lhhfy°ätïÌ€6…Áާ=·+Ù€§ TCYã9þxŒòç LÙ飫>Ñ¥à üÒ“^èþÌ‚Z^aPñL1{NbàøaQd¨°N¦Eh¼‚Fçуi:“x™míµ{®SÓTŽ¡ÅsMŸßïÑ÷,ÅVV5ß^ä¿vYnƒºˆŠº¤riÔ‰49B®îéÎ~è¡øö.:Jl¯×ÔÔÀòkÊEJÁõíª|n ìmAÁé×M/£Œ|~ð,—–.‰Áwš-š«ÙVÏñ?“Ý,ÿXoø)Ô–I¢ñýCÀj!ö†‚«GeZkf½†Ï(U­+Æ|ªÏj¹œAiç Ó'–á£ÛìÜTÔX“´Ëzo,&6ä‘^Žu+:’Â8jµúö}ûoµ.êòÏíƒycñDÜ?ˆ M¦õ3•ý±dδ'3:½v|ñNÝQ4Ûä0Œ’áºË°ÀWõvÆQDZ|I!õᱜؼÚ+r7.Jáœ=w€Ê«A‰¨Yöd‹7û&KŒ«$I™„K›á.žCw;¾VË2 þœ)¿Š^’™(±HÝZyÍÞ‹¯À4Ï1¡Èùš.\xáîz¸ß¤÷®o1&Ä¥k혧ÀFÞ Á«xœyÌéÉÓK>XÀÐs:c\PBµþ’SLú¢’ÊŒW‰»WÁçý •wQ~¬¢µÇKýÞ‡,üØqŒ0/™BÝo )!ïŒÝŸÊò÷9Й5'.zB+Îa7GØ m·("wÛÓ™tÖšúúgzØž².q¯uW5™H Nö$Qt”ýSŒOŒgÓP×ÃÍÞ çŒ2Wڜϔav?6ÿI?ÿeiÕ@LOlÜñ+&h6ÿnɱÜD oöQ#þ,,/74‹k;} Ëg=„iªõVñûõnìDûÊSI FrØÝPÃ’+õw:qN¡V]%ª„dÌÅ,Åçz²4fp“°/3«ö棗 ÑB“jç-œ¡ ²”Àø—TÇ38ª;,““Eè?Žƒ àéé°Øæ! i݇x -Å%ƒXÓðÇct%îX)»Fa;¹Œ0tt¯±V&?n;5JÞÇÉ ;ŸVA¶X_·nFÉ«vØY,j_„ºhwø+pô©'28­ë»ëhw[?‰2cçv{?1±“+0°·‰èHp}ÈÊS¶¬Në{bS­Ì_>ž•c!(ãV1-'Ãßû«m4ª›»á—zï–¼Ýnæ©8\_—FJ|´Q Ä/½É£^ÈùŽøtʆÖ•k(—Ú1¢zwrîíÄ! [¸ª`,ñ—uç¡ú‡biK~æe_ü¥ñ¡q2”ø4ˆ¸Nö»F_øîGƒµù,íõ1Ù_¡¼°Jü°uðÕÝ«÷o·y_vhfæ’`D؇öF­¬Þž2оHxÀ…ÂÌŒ oY½¢oYJU‡y4Á , îÏÚ:èwÔ~Ⲋ*IGvÆzL'yHzH*_sËK” |¡ Æë1ÊN«£¨lßÛÞ£å–ëÎñX‘æMNÓÒÍô>àÕ¾cŽwWIz{â7ÎçÌÑÃì{cB•0Ï'îSÍ3’ý•ÓîËѪazäKi‡s«”…€ƒ—©Æû­A•Ü ÏˆÃ°[f¥†9¿ “â~R˜S¢ ¤ÛÜt~¹Zzõ"Åo11+ºexS5:â‚låÊGä‚ÞÒÞFÚxÿGïÄíÅù¯b¨6x ^=‰i¯vfQ)5‰}uœ½%¿3n Ÿ¯½‘TÖÏæêƒ&…„`T`y6¼}?m¢}‰£AnF, ‹÷/Íz:«Bž3i)×äÄŽ(®C@=ù­_¹,ç‡tÙ?ÒoN«bé鿟k=Dê^ûü#pÊVe_`vܾ;~~^—ÈúޱËòƒª% •y#9£ÖVD—”DDÌÙÈqV;}½È‹n]Æ5ÆHfÐgTýôÞlÜ6eÄÎÖÎÌ2®†¾™7ªnÇ™+9Rx¦ã~Th2Š·ÊôÛk*sÛõ=ûr%ˆ‡¤ÃY¿aNªé‹oƒo![†41Uï7ñÇQ›ë6u³oV»ŽºpÞNë–¤ýZƶ' endstream endobj 164 0 obj << /Length1 1494 /Length2 7585 /Length3 0 /Length 8591 /Filter /FlateDecode >> stream xÚtTÔk×/ˆ„„H‡Ä€t]CwH7 08 1CwŠ„(Ý‚ )Ò!-Ý]Ò ]êyÏùÎ{ïZ÷®Yë?ÏþíxvüöÃH§©Í ²v´„È;‘œ@.Q€ŒÚ3 €‡‡‹‡‡›‘QŠ„Aþ‚±õ .¨#\ôȸ@ÀÈ;LŒ¼³Ss„”]a (( åáðòðˆüÇÐÑE vƒZԸʎp›QÆÑÉÓjk‡¼»æ?G‹+(""ÄñÛr€¸@­Àp€iq¸»Ñ h;ZA!HÏ…`·C"D¹¹ÝÝݹÀ.G[ V€;ixA@\Ü Ö€_ÔÁ?•qa3tì ˆ?¸¶£ ÒìÜ0¨ޏóp…[C\w—´•TNøcÕ?€¿zrÿ÷—÷¯@Pøog°••£ƒî …Ûl 0@C^• éä€áÖ¿ Á0„ã?Ø …-ï ~gȃ´à»ÿ*aåuB"¸Pد¹…¹ë²ÜZÆÑÁG"°å' uXݵݓûÏdŸÃÝáÞ 6P¸µÍ¯"¬]¸uáPgWˆ’ì_&wö?˜- àááá@œ+;î_áu< ¿•À_ð]¾ÞNŽN›»" ¾PÈݶ7ì ]\!¾Þÿ[ño XC­Kˆ-ŽýOô;bóG¾¾ Ô`ÌsÇ= €ç×ïï“齬á0ÏÌÏ—[$¯©gÀþ§â¿uÒÒŽoN~'¯ø‹dBw߇ÑCÿJãù*Ám"²½kÓ2vû‹,-+àß±ÔïX °üCr«»ðÿ›ê¿]þo ÿåÿEòÿNHÞû­fù­ÿ?Ô`(Ìó/ƒ;Òº"ï@Íñn àÿmªù³´jk¨«Ãk•à»EÁma·Їz@¬5¡H+»?lùƒëþÚ2ÑtD@=+λÑü—înµ¬žß=ˆ;JþVAî6çßWÊÁ­­­¯€ ìâöľò$ðÞí¢5Äã7‰Ü\pGä à®<_€£ ö¯‰ Üg×»¾ßÁ¿~÷ÝsõÌàvº{#à0ˆ òøúg¾Ã|w0Ìñ7 ÀàFÜ1ùoù.ÒÝña·Äåð¯Ê¬\]îÂ#sï®ìÿÈ¿_Äb…=9æh%b_ÒpöôØsµÿé0ãª~+§÷¤Ë׋‡˜oYËÒ‚æ]N@o»[Í,˱KMÑ^{oÕVb¾¨‹×ª¿ô¹2}6´Z=1HÚ1»úÔNý€ŠSGjÍçÚÙG/ð9Z-êWeÆ,gWᇚ9Dgîm ŸÚ‹¦{ÃÆVµÖÊUp®Š¾sFëF™¾a̶L%§Ç@rRc±î{àŸ fÜÒ*DzcûnGóåy-ð¾:õš-ÖáE4Q0P‘S£ö1yKo$(“{äÍtLxÔŠçÑfâq$Îp>âÚàM-ƒ>‹„W·–»õN6W²ÞB˜w­Ä—V›»Ðk”Õ›G!ËùžC¨7m¤gNôšm쩦D¾ºŒàÚmÔ4{_V:Ïvëà< K¬;ë®þ¶Üì«ÿ^²]’ÊÖÈ&gg13-šJˆ^„ì»×¤Q"~Ä1åöVø *ît }A \Êåá1FoEí¥ÚÈò9xå[Rµ¯Þ¸0B0s'4 ¾ T¿µüš¸¿ŸKaÇ'g‘Æ’*×ü2{.†YK¬R5\Ľ¿PBÊ%[èI«·$0qÐÉǯ¤Ðº:^Úaäi.òŽkW¯D·þµÀ;-º•íHξªÀ.éàÐ6‘륓¤ÍH6õÎ÷KÜÃ¥»_-ê…d¿l|Ù„ÐHVEÞË?]m}`ùdGGÚΡ:__çéÅr_Sþ•;G‘’,#sÞ¤Z»Ê¦ø ŸIÓ Ù¼VŠR¤/«x+¾hœ± à¦=š}ض6öÄüKwµÞÁ ¥ôcm³œ'^ (­ãßû–éz†–¼a%&ïùÛjbQÉh°X&ºñ倔£ù§,Q765sºî Ê)ªòÔ‘ÈüvWï}é'˜_øxˆ%ú·¹…ÌisªyìÄ·cñöK^éR´15OK&sÄÇ⡞š4¢2ÌËJ†ëþx0¸v%ø6ó»‡B¶¼óÃ㔊hãØ› ºñ!lU^²r㌂ŸËyþ¬tQ6¡AXV‘X(Ëâ£ÌÄ]1 ψ4ùä²éB8EË ˜ nA•ñ˸Ð'Û*d”ûQ”‘E(L­ÞB¯˱Ÿê ¶6mŽ)Ž>Ž?Šä.üöP~ÜÖ^^àMŒûv8ƒOÙm £–xÿz"Î…ßgñt O¡Vò­xý¦Ã^eõùDÚ\·Ýþ\VÈ|ÉfVUÕÇ©’Ý’GB [¤8æ½YèÆo„=4Åù£ÔGO‘gŠ(Søxb‚ɵ5¾.*®ÀM¾Ë]th i¥"²¤bhØ÷Ä“œfìÆÏІÑdÞy/À¤®n_ƒßÎ8ÕüT©.çãÞ§²+’Ž5«HJžyê‡jÊçj™†<Ž1nÞ‚óäoÆLÎZ÷\2»Sèù(žž¢½I×ùn¨Â5£Bþ£›µ™ƒLᛊ78\ÆHZ!ã 6 µç4ËÃæ°V^ ža½ÄRA%MØåæEq g<Ù‚qùÖ¤¯;ò¬“‹B¥wœ‰—Ñöe™×‹Så^ŠdWG?µbÞ6r¯9׸ä¬#‚l)õlùxí-x†nE¾öÌK¶½SyCjÅJÞ3pºh²o›‰,a’,\~5Ðö󎡳åþ%~­!ËZÝD¦&5·Jãdl@*OŸ×ƒvCØ™NÕú{éòcÇ-¿ wT—ôS©òŸ;tS› Puº¸¿ÀBÂ…U í-f„]¹Ž\Ùw—'é/Ž$Äö9ü½º+‡±ëËæ³<кx’Ac]„ú@yÝ‘Äy€íClt•‡žçqÕÁP:½é/?òÄ÷Nn‡ÍxéÔa±É'í\.Ò"/Hà5†2%2À‹6d‘µÔ“Óa”Áçê/F"U>¢f ‹½kú1 ”¿`ÁÀ™ˆR?ŠÈG[X̳¾)n¹ÜA+yt5ÏÖ!Þ‘Ÿýv¹(„¨ Ñ”/"^¥ƒ'#gª·™c·ð¥»‘D+¾_>ÏQóKÛÒA°?CÑë/ôC|| §š"ã"ÛFÑ‘¨ÌË%4xÛ.Súç¢êoò¶»ÃÇoªi¥0l‚qǪ́õgC™xùÝ a^8k #¼ú{DÛ"–·ïVé5ò3‰¾õ鷲ɚÎrç[xEi•?ï~c¢õ¶å±<[Ñ T‡ô zÃLpbmþNÍ"87L›Qç“zŠPLû³ä±mc—¼Ô«.Ããv¢CgˆoCùn^äé„á Í‹ŸØýò¨ºr9ÛG7QûÃ*ÁM£øŠQÌU¨FZRýøJ“ HÆw+· iMƬBmLWYvýðtÜrŠMCæ‘ipËgÖfÿ‘ùdn¸9ü-š²j6)K‚vÅzVÏ` vI•:µ·Š|Õüô¾ÙóT˹ø?Ò Õ²w¦XÓà\ÝlÔÚvï«pB·¥=Õù™ºµþøŸÀ$"Ðí.â-qKÇÑ!Üh-¹þiáé7Äñ¾c*±¥”w¬çŒ m¤7™—¾¿Ñçí=š528΂¥S¨-B3ÉšsÈ䤬$•IUÜéë}Â|®O­_j¥ðÆWw[Âgv›þN/Ï·`ÚEó i¯Òo/2Ã~òJº4`aÜûqÔp<þ¢ÕüŽN˜b4×;aú¹­û$&6֙ЪüC)OmS¿ƒÐÌ{É%ç0Gé±Íâø´ ént<çÕòo‚pgç/v åæÁÆáA6gšüŠ¡Y$>?0õ¯*ŦhƈÑóIÿ˜<ºZ;[T4¡þ`ŒqLèOÞ±P?)r’àR®—¾>ªBp£íF|¶eùYèA¢Åñ)a\º$ܯ€h¯ ¥}Æ b*HÌ~áàYÊ ­¢ˆpëÞ´o9Ñ/ˆTm{&mFýL ûºåñÉØ‚…רqµŒ©£sªâÁ"%ÑÍçHÍÌC§m‰ãªü2H;bÄ¢-h>î¨H¿˜Û„´}nž¡-‹­Á–x³ûªåFù!ǘµ)ìsúyUÞ!w´¦63®Yí±è ò¾r¹½ÔbŸ‚åXx¾‰õבLk9ß{UØùæ¹sí~Æ#± ñ×Îá+®H˜ª 0Þ  ÐG™ˆí;Þæü=/Pr%rÐ (£ÍÞDõNØêGé¾§ÍÛ‡Ã÷A9Amê[È[ËÁpM¤[k•ÛÁI]@EUÿáÃÚ:=1ŽPL(Y0ª.ãwÖõýÚÞ¶Þú³ƒX0Dד`øvûÊ9ݪֈájÁp&… ã†Už\YÍ6ÍeêSéÉ^%ÓÇÚÀSÀ“£á:»‡½ÆZaªvE†œ«A~Ú.7ž`€š¦¡Báè Èýh*Óû…Cd†(¤‘¡Rq³óC,”Øgi±8é­ÁÕݲŠö/r-#H\H‚Û`%‰ˆŠ_5#V§s)i5ôÊÏ c"sIY+É<¶àôÅæ´  z™ôÀñ{¯#ÒTø)ÙúU8)Ægõó´W5#ûJAE ÌÁm¤m3dŸ¿÷ÊíñN *j 5“•Ñì®èwsVÈ÷DRê0gíäDiîÍ?/•S:i?Ô˦ì uPw˜d²WúF‹¼ÖÌÔBZ bLV3Ó„uÅФ¿¯ï°¢F¸£ŸI¾U´0…NÓœ>¿€ñ7Þxe kûÙ÷k¨’?· hxßè­)óP%ݳ!o <:zÔ­½€…Ë ¡šà)¦ O÷fåOKȽI–Ñ?ïŒÚp3úö}›ºÿñËœG†0Ö¼¯iU‰û‹B2Kv{ÁxÏ71‰ßõj_¥jÝèc1ušY³Úk?3eA/zÀÀ¥úE5j`•¨’2/Xíìr´â,rsðý)w<öÁ'ðRi|$®Í'OÕû¢Ÿ·È“jº5½BÍc_;3á=é¹ìcŠYÜÉÁj®åŸ2÷6¿óXŸfWe)#Ê”ƒ[‹ðî‡U›op…ÿÈ’„`º»u*Ü÷ã'Ã<Œ2 øùEœCˬª5TÒŸ¦àýä¦:éõ=žÌæÛŠ´l[%·²ºÀ3ÿš G²ÕãÑî¨ID¶õF?‡ïÈÛ©+µr|ZÏí MÞEÃèg„Š× •,[è×ߟïÎ‹È ÑŠRÚN;%ì•ÿ¤˜PÆx¼Ÿ\s!h‹C&o+õw˜ŒšpË#¸½©ÖìÃdnö€»n¡ôí©ýêûÇqNØ–ݺtcI9¦†ÍŠVÊ’#?A«©Ç;?CÛI±Óµ&U’!á+tE¡;a÷ê߆`Šc}¡*ˆËwŠòÊ==˜ª¿oM7€³¦q1¦|‰` Ušoyf Èsæ´?¦ôÍq°ô VËy3¾6 µãØ&>’žZ–óH?û¦^Ãèý¡ØÔ©]`ÆÜSnÖiuóéÊ—ÿ‘ï}eµAŒH&kí|Õò.ñsdÔ³“*ù|¡IÛ´æÑûÓ™TAš£R×åÉñ2™õëÉê¢N‚ ÉÏ|zׇ>hgmzÌs ù¤oÀÍÅíüMüÃh£Ò2‰ñG§=eëJTüz5-ªŽÔ†ëq°§,AœÌ»&…#Ò’ef²+š·y\óxD‘ªªK“œøKÝ{DÚëlµ¾sSa˜cž‹º ÇĬ¯˜ß†€Ï™ß”§x2ð_†7d—#%‘´º™¸Âäì\rW‹ßï“éŒÕ›·))1§Ñ#©Ùe‹ýøÄÔó¿?,'&BeSøØZas“Q½]IJ{HºÆ–bŠÚvÕP†;E„fô~ÝõÛ–$$7“S²[ÜÏ”¯!A­SÜaˆs lIRÛñÚÿòIÿ¢ƒ]ÁzÛ=SÏ*»"¹Îì€o7ðEg«éÛKyÍIz9"ü¦½ìC6[¬þBª×þ: úµr>·Ÿ!ãAc¡GÁ+MdªÁ’fy9±\eßÜ×ý4µð Éß$úR ^ojØá†ök„rŽ^rô‹T{Ûí]ʃEz—¯|¦”ìØ³*É5ù<¿LœÛ!, ¾š‚ÕÑ¡pþP‰ªô]DѤ۬¡ÄyçÜ_®Ò0Gß®ü²tÍÜËõØX Ú÷|$ Þ¡Y6û&–×}=Nr±V¹YT@D(:$hûÍ]Û>¸ä¯ìRÆÐ\¡l¨â¶ífÅòÌ˲¦T¤¥ÐÖð/ÇW? ünÒê~Ôø}<í".ö&l•ˆ#GÙ\0™æN_y#Íå,qDª_Þþ²§Žb‘Hú–ÎóöKÿ±Úd¢¯‚WÚé}Ö€ÑC<%*óÙä¥a–VhK„v’¿õà›=fµ&sÃ÷ †‹¯¸8¦\X’9þe)5LÀ³Bqy Á”ØKº–ÔUßÒkJ†Â±â+_b´ö/¿j`{A0‰ÇÄz2¸5_µÄô`PÍ4Fþ°/É endstream endobj 166 0 obj << /Length1 1442 /Length2 6756 /Length3 0 /Length 7737 /Filter /FlateDecode >> stream xÚtTÔk×/ˆ¤Ò!)Ò=tJw§H0ÀÀ0C Ý"ÝÝ!( !H§´t H‡ €H7ߨç=ç;ï½kÝ»f­ÿ<Ïodzã·7#–.§´5ܬ‡!8\<¢Yua/#£ÿAq À.®8LôÉe]À “!jêp@Å ò€‚¢@!Q/Èá.¢9;Ä ÎPÃÀ®8Œ²p'/ˆ­ùÊŽ+VPDDˆã·9@Úì±Áê „Øù¢ Ð…[AÀ¯¹`·C œD¹¹=<<¸@Ž®\pÛ§¬Â v»¸ƒ­¿Òh€Á¿ãÂaèÙA\ÿÀºp„È @PˆæŠ4pƒYƒ]È·ºÊjM'0ì²ÚÀ_¥¹€»ûËú—#ì·1ÈÊ îè‚yA`¶ ÐTPãBx"8 ˜õ/EÔŽ´¹ƒ P%Ráwà €‚´6„Ìï¯ì\­\ NW.WôW†Ü¿Ü ‹,³–…;:‚aWœ_ñÉA\ÀVȪ{qÿn« îóùs¶À¬m~¥`íæÄ­ƒ8»•åþÒ@B8ÿ`¶`@€‡‡GH;ÀžVvÜ¿œëy9 ÃÈøý|œàNd `?ˆ ù‡ãã r.n`?Ÿÿ-ø÷ XC¬K°-†ów$ ¶ùsGvÞâ 0æAàùõûûdŠä–5õúGýws¹uµdTdÙ'ü·HFî ðáäpò ð€ã}Dvg×ñ{}3 É„ƒOã6¼‘ ¹ƒ?…ÎN#žzîé£lwµ:6ŶžXØ¿±p¨epmÀÐ)%™ ‰„ÈÕo"hž~5B'¾Û²V7Íeöœé}úB(u<|‰JÄõékÜ‹Á®æ¶„¦MœJaû6o åÉ…Ù4FxóäuYl¦&L˜êPÇöIª˜\Kê Uîo‹ {ðà‘ïÜx'–bvRñöô^öw’‘ùê™`’#°W%áM w¿;§%ŸG£È³øs¡{~9³ßx„{ß½§W ©ÞÜO¾¥Ô÷ºÑsºì@Ì^5ÄFü4¿Náå/ù œp-I ûJF‡1¥™x2™fXª1Y‘>rraˆ÷H.1Át‚†ç‡?‡Ý^;YïîA:Ñé :»î‡QüÑæž!D-Ûæ(1 Œ\a$)Ýäž©V^¹˜xœ¼jI pcÜ7¯ÎTÀ5{Є&Q¸’°M’2•Ó*jÓšÎÈ9»Pß^£ó´e-RíÞ>Bêx°¯[¼1LÖ¥öš|eß»pk#In<$…øìWùM”K~ER>0¤íÄ–ì¡áQçü6å)}ÈX•³ž&ª©†I`‰ôPÖùx9ÆD·úpÒ‰zlJ¼Œ6ÏS­©-*bÂßmà±ip³ùøøüW\T‘1®R©ÉúÇ™TQ}ÜðsÔÞ\e*ã‚/Ï9”B#‰Þ´õ(Ï?åÍœ{Èú=ÿºéí»Gíoj{ü½£<£Û‹“BÈ0 O "“Oeå5=UB/qì‹^Ú±R´¢½¢ž ‹® šßIõYwÃì ±*dÛ+KÎ[n.÷¡@ Êo}ÏF¥^wsPÛ—¶YùÐfpmyüª›HøžÞÕ‚uµ=9?ÝŽAKSú¸úÄ%ÒÈ}ʈlP4z_’ÇèÞâÞ³Å×îw ÐZbÿýÞ¹ð*cµ0?g,½wG{Ù™Í2Kõn"QÛÜսή°SìnÍï$‘­¯Ió¥ø+žøŽ{9žqòsr þÌ~`¢pêùì/¦µ¬õCŒ“kƒ!]Œ 3gÜKu|æ}â›W=qóËôÀ¾^Ž£&WÏʺ…i÷³º³Ï‰ îèÍöì…6ù²å?¹`dd°Ü/Ð3ÛW=å,pŒþ9ð#s2‘kUÌÚ‡uzÕ KÆî;ùvœ›>ö¶ê²í{«¢—ŽIoÄÄi]_¼§ãÄy³6 l˜5ÌîÄÄjŸAºAQwªiÖ|ÿFÏÉ=F.Ä,-ž¤»“6:s÷Ø“!ýû ôxÃ31âÕ–Pg¥ÄPWð)Õ é¥:U˜7€e™Çô7­pØ0#D¶hið -ñ·Nl^ŠôÞ&s×;7¹r³KfÉõeì{°3Ùù6fçåI1úêâGX­“IsÚòn6Œž·Yé±PQe°Xº8?w¦pC5)S¢±í›ëF!í$”ŸTP!ú^cN[šÔµe/tzúyÊÏ Ú,¾¤cÍÏt ¹ûÏ„AIýŒÌðywz}ÞXºòÝb;mɸ£W¥¬[‘)¶L*¯öi‹I§9VúìuMI™>wœÇ†Øú¿±- f²ÅÆAJ¡a‡º6ÉÄi>ÎFÔØ•ÌhR}+Ö÷ÏaPšŸzÕn¹ãÔ»žLì~Ä‚Þó8üG"™w†~üv`í‡ÐNs!©dB#jýî·mÜo¤­šØÆˆQÞJwšðÓˆiLúÔbÐòßí½º¾/pR¾Ñ¡VÙ9'Ag Àõ -ÇÏUuõІìó‹ Ý 46fK‰\¼@Ѷ„ª¹_¦'ù>EàÁM¦B‚ÄϵX16£¼æ˜—Kù‘ŠðhðŽ|쬇4Ã.`ô(}êâÛ>²5]=kø»2ñ‚±”E¾ˆÒæW*ŒFÔSr3Zp8’•Õ@rw ¶tWÖ\(iêO¡GË[ñ…—FkÓyd»æ•œ2R羌NL•ãÜWÉný2^ÕOØK«Þ•vÕ@ß-?©Å’7#22Ÿlö>xfI[eʪC8koÃŒt² "ØDTdˆ˜Ä‰>ýÆá^]-qƒ¦‚/Ìküì\“\Зf‘ÎS*f•À¥Ü³±Í«'ÀãQ }šè8Œý]±€c¶g”#…t“8êzËײøBAùNOi%N‰:Ä"å4Ó=»-åûÛM ÆI.Жªjh\D…—ºÌŒ®U×ÍÁË^àý‚œ7ÎLñ*f~ʳå”—Ú¾¸L3%Mý“õM:äV|L“-s*ùùùGpŒ?w'õÛùŽ˜Òd l,ረÔõÇ4>î?™ž™Äá©À›^ϳ=Ü è4Ç¡ö€­¶ûì´hK×£ÃЊß6*Ú&)+¥F›bÊã^Tá%Àz rîê7[øEY°MÖõ^?§Åto¯ÉoXIíÒh”\ÁQÏ븇»Ã\õɼŽ3Sé¾£¬‰»Ó*Íy©@]e†ù …2.á—›´Æà£qüïÆR×ÛoÜ2 ¶,ž/O‘õ7’¾[ <‚v;¯–wĽSúñZh”£Ü±úÞº|ñ·A‘§)“×%BJ¡”ÒiÓä­àñã Ÿõ±wù1’“ƒ…NZ§zIKБ¼6¶¹bÊ·­Ë)’ô 2“3“r^cÕÕvÕŸâÈ/rôð[ÍtúîàPú%à…ã¡oJ\~­"©ö$µTÝç½Þ¿×ye¶¹oöìì¾¾´Ð;Om0é“}y•!nTÞâ‡öYK}xµS0©{ øS™ÊL¤Ö¾M)ìÈ…fi:ФQÂ’£ ˜w <ÉÜúL">Kù2·<°)Pî<ÎNPO–¸Ä'9×›éߎ‰>CLüšÊ5¾*§;N7ÀÏ [ˆ=ñ ïò(È}Kx#lÑaõËÛŸtýíäyŸöü<BF‡~ÁD}Ùµ;¹¦V©EßéfìýKc$ý˜H, _§78ÏB䣸¡{&8ÞŒÄ]\ NÉ ÔÈn²‹ª&L}‹Hz¿z±è¯`}_öˆ¥8Ò´ÅxŠ–ˆ2<T’üawati£g!èµVóhi£Œ$|(È£Uо·UZþ>wȨЩm“¼¿ÒÓ•"b’òã›ÔÇ–¬¯´÷æ7Yz©ëÌ¢3©åiîÕÜ06¼gyh£â1´nöøAV-sJM5Ö½ƒz\@-ïp\(èe Y_pÁþs"¼™P£†WÇ7FÔÁ“ã¶!Ö]Øú"“Ü뾯Ž' F[õ̉È™(̳ÊÉB$€WÞÄ#гЫž}Û¹ïEÐW×U*œÀÑKjÄ9Øb*}>ÅŸ{2ûü'|VtÄo/»HÔ_ÙóÆmüDµÕ¢´jÐíc,úü8û4ÛíÒ$ˆÉm<Òú½8Š/{°z“Ûˆ}bÿ9,4;œ¬˜™ ¬c·É‰ÃõØŽ¤D,ÆCý ¼÷s¹Ueþèiç% í¤ƒ<ÒãAé…ÆPƒÛZÊgÜÓÇzû'Xñ%¨M‚fƒŒôÛ× ÕÑÆÔ‰6ñ#{3»©—RÆ®3(gü*ÍRÜït5KGaÏULèû)7÷½}€¯jЩb’?Ü¢go²¡¡‡«\«îÏ%úÞgi+€µyÈÏ4úù˜îÙ›·µ*–.qU>­¸¶4>hTÙ.N!?b£g¢C É)':abøé£x±_'im%Èë*e ŽcòuUÇ#oÂ<ïèÊ59ÍÅÓÕÅ’/ÄSƒ8lsÝ„wkäRÅ0IY LèfF‹œ€ OjSV…öF‘¥Õ¥Xeg,BZsôÁG¢¶¡¶µîÓÓ°Ü– y“°h°äŽt]•¢eXìg²b4—Nا>•L²Éd–,+åÄc‘X"®\ÂìïY¥=sn;CJ+ChÅ­W' Ÿ{ìŸdÖÖ~!ö³K•n[øMÀغ±w'U³pÇØ¯]›\ÙY®På+Rúì¡êI{þUŒ›Ìð²¸!.Ÿ^D\¶ F¹ Ž‘š6ýoDsZ½aTEöÉ ¢C5‹ñ6”÷±~øX?¼žmÚÄ¥1F="Û±AܺÓ+i ÿð%IdGóö×j[`— ˆP'#<ó°9Æ<{*pµz-H³\ =Ÿ©¬ÅçÃ) ­f°ûáø¤B»á±­µ5¥{)팬UPé‰Ñ$ÞxÔ”/°]¦ÛTl ¿n5W/üqUÓ¸_[ÔbPË·#¶ãø¼::LM³\±¢ÁåÞ©nåÁ„è GÎ^O©£{“ Ÿâ\'ŒÛyQZ"°£5¨ãdç,SÓÙ ![ÍYìÑçeó0B7¿•œ¼èwÑûöÐ’äd¹æh¹X~s_Ø€‘|’k"o\&*“Äu½>˜Xê£íB´Úz:´½cëuó'”¾mC¢–[_ó{¾ó×;í¦˜|2Ò¿=§ý‰ºRÒà¦R´.{XÔ èx`q(€Ç]›ÄQÑÕµWµÜ·`kß‘RhBËÃÃ7»-_+köW-²~vÛ;ðH QBùpϼ|0F’„ Ëþ¢%>ÓÕ -¨8Ž¢×Ý>5ãQõsŸºS^š˜“¨{ÙEy¬Xâ7Û½€<· šPKe"’LäDù-ˆ ˜è¦CUå¥Ê?1>Âèy­M?…¹±t´Çh wô6¢<*¶)‹4tb«Ñk.\Œ‡¬ØÞ‚ë-m}Ê7– ‘ê/k×ÖØtÅɃú±Ԧ«±®+ÄÉ+Md™øC™©îð&^&’4®þü1²ïvµ.¨ÿ\Ôs°¯øN¦ V÷QU}("çZ“æ*:||½ˆž8”ð½Ë@Ò®#àõRr1Ã=¿»ÁèVйvŸ½ÃÑ+]`C걨SîiÏÁ–s³¾…×0ï Ö«[ &©áZ „Xptþí¹ÚHÕƒƒ¸ùø÷Îöç쥪½ YAq‘ ]=ˆïnîzo‡À€ SoŽ\h—ßG¦Úf±ËHbî¼®º™ÊMp^…Õº³º~#núî&Ë{‰¦ü.oÃ?ï˜Ò68#ÑU✞ÅiS»¥ø4Ÿ^G»c§X×è1TÄñuh3n¬ø¢ÍÔ“‰v8…0À!/½I@þº„ùáµw¬‚cÚe†iEÄÁG½.ŸÑvÀ€n£È„t–ÞÇ•D7îÙÍÊÇ¢¯Æ È)²øàZwþS˶ßçAÅÖ¢Îkoý5Ç^ÊR™‘±t6õj¡ÇÅò‚…³„âÁ#ì‹ëÙù™ÜæAoØ 5ŽB FÔv:ô”%Ÿ÷oeS¸9Òöº¬Ø–4’ðÉÎ_Õ%*o%/ݾòûÛ ìïÞz Î¤†¾,œÎ¨º±þì+´Ó°ýÍœ8…¨Uú°ï¯ëS©=—ϱL °Í©‘0*XÅ\»ÅIÔh‹µªœ†MH>måF€ Oo ÿ“f&Á¤“~‘åwC“·'Ã+D놊ï4õït+ ‚EÞæ2g2)D?9Ð]•2ˆ>nít¹Ö`]Bg~2,"8ÎmGñ¡±\9Ù‚ÕÐäLö®$Õ/ÐúR¬Ê2kZÞ˜ª;1”Ö߬‰†óFúÁ]É I]vBÀ76ÉÞtó} oÊaúýú~M†ûnM7IQ8Nq°Àheãj™p G»Â̦3DºÇDâ>à}]å³Ö4Iúƒ!¼j0| šãäz+ ¼BNÌô4:>\Ñõ<ìÝ? Þ6ûöµTü=, Ó1vÀ?bÏdÒÛ”„<²Èkí³’_FýØÞm¶ŸRPÝõÔàj ûH°L™ú.þ›Õ¯“ÅÓˆEI {·¢Ÿ‚”Y¸Ñ;hºè9†Úpz¨áXtg±ßŨ#bLNÒaªø2ÀÄxÂZ^J©z}Qgˆ¹ª!¹pÂפ…E¢;Ä9ÿ&ô}ÛCvjsŒñKõ—ñµ«Ò+dCîvd»å|9üׇ²ÄºlÙX™š2æ"ñ[¨¢žK>0{vòóL‘꜊ý|-ÃÌÜi «3.ýt^Ä$Žƒˆ]yaÚ/øèKƒÊzúz•jmÙ!öeQX[XÝôšåò1ûw˜ÉŽÚÙ1‡çœéµBj>çÄ+é†wôg§¶iˆç¬›É3ºë"ýØÄ‡È«Å•x󲛬Ѧm(~ž='û¨“¾Ò~Í? )xêzU=.®YÞ4´g´¯{íSÏ—t-k; ÔµŽ]üœ)?¯/ý¼œÛÖx›G­rˆo~±WMñ1è}¸™¦gc÷¦@eò®§_°¬yCˆ€áw ½1;]¼'–j{Tú†Ÿí|ÊÆ­~Ä}˜`ñ’±¢Ã ¾z¶«¾ö,I@fM5)‡:¦ˆ=WY°ü³ØÓ¸BÑ×,¯”p°†Å&dº½[ÐÔË(ˆe½íSÚsÌuã™÷™C»Ùk_guÝ›àË“»ð>ÅäðǾů i. ýxöÙC]$?ÍÕèÞBu³oŒПï´ÄIØh2TÇÂx6  8Jbxj㟽ùaЩŒ)*U¸ðZ‹Ã:ÅùÂØ+v:>"ÙPd¹aè‡J5«ñm½Z“rR iâ|JV$f_ó·NýVö˜lj{¾ÓH¸Sè.äqÌ>Mÿ~1å+ VsЩÄäÄ8à èˆÊÐ ¬Cn=Ö´¼hiµážõ‡ß{è–·5=ņ‚?ØÇO†r¥kXTˆ| pÏ&ììÀÞûš{îåÏ€"j/‹Aúj*Ö£eüåeËma‡ø?a¦"¹•,ûg‡DÕ0EC˜—Ž\~;ÿsÆc>¥ÕFux o ÎBJèÄQ'@žÓŸ™àTõgìÍvÿQC¬G¯÷JøN±%S–·¾¢SÛ:42z?"ñ—¼r¼Âý Uh¶òf–>/wþŠKÎFåÕ®¾o,ZòöåÝ:«ìøöšøDuêm…RHÏ`ƒ¦‘† ‘èR±4éœg^mŽØO‹cÓ±€†K‹BîI> stream xÚvTlû·tHI#5ÒÑÝÝÝ)1`Àˆ Æh •F@@i¤”–’’!Ò!(Hý§>ÏûüŸ÷ûÎù¾³s¶ûú]q_ñ»î3.6C%g„#TG €AÒ=c)$" sq™ÂPžÐ?(1—9é CÀ¥ÿ—^ … 0˜*…1ÓCÀÚ~ž°,. – Ô߆¤4@âsè ´p¨/1— Â; suCanùû:ñÀRRü¿ÝJ^P$Ì èAPnP/ÌNO€  Eý+PÖ …ò– „xù "®ò<ü€Ê ` õ…"ý¡Î€_åô!^Ðß… sLÝ`¾`„ *‚„0€'Ì ÷Å8øÁ¡Hæn€‰–.ÀÀ ÿc¬ûÇ€ðWk`AðÂýåý+ þÛâä„ðò†Àƒ`pW€ Ì 0P×D¢ø¸ó/Cˆ§/ãñ‡Àê~žž¿µÀ_êÿC ñ‚yý¥ÇðÕ…á¾³ðÿ6µ€þYW=¨3ÌÏ뿵Z(f”ஞÿi"ÌWu6„¡œÜþPånökÁÒ¾-ÚQªëe&b0U\½ô 5ðÀiÆj׿*ðñ“$3|NuУX×[>?ôðÓšÑz•¸ÎÍ‹òqD³„»%“\…޹Sôìø(fB^ʃ@òÉ“ï”ù£×¬Ú)|Äa»‰"Å!ÖËÂIgSÁèW¦Â¾ œ ÖôÌ8'”CcÜ!Ê›ÚtÓ!¥Å ïg›e‹YóIù3(7…³«`ÆñðÆîÿ¡Ùwà/é€è;Œï©¾¤Õ”5RÛ#Ù hªZìã©P5"PæÍw.ÊèÖïæ.î™LsRãu×€) ¶´Ҽ؀a´¥t‰Ha~‘vÀ×ᢽ”§Z:´î+ç. t—Z·w=üU‡,ìÑb5‰%®óÖ'™ß .î-زé°öw÷ÍÄŽ!ývµ'‹Ô‡çÄwδsé|boÈã*Û½s!»#+ü.Å1åK*“Ékü`Ú\\y¡f¥uHÛçw†¯ÙÝ»"RèQËa6”s4™6Þë)köäö7 öŸS)nYìÍRgh>÷ýxk„ÕïÞÂ4®PŒ¤”UE˜/$åS =9'oýnhñùÂCžÜÆjÕŸ»}$"*ãqOâÌ2Ú¨˜ðU϶҄w§Å¥¾z!ã÷ÄDøúØ¿=±Kr/f=õ}PÇ™ýÚ ›uîèÁ톾¾âý¡S¯7Ï•/=×5s ÕÌl¢­Õ#kËŒŽƒxÇèN]¡ êZ™ÅH3÷Ú÷®ãO\÷DêXî¿&Méœ U÷#-+4z]b‹óª~íð©¢Þyù …»Ùƒø@F]êXÜÏeIY„Á\ù¸S·uôµ/Òz*ŠÆÃ>Yˆ7=ï) W"L4d¤×ßJÈf“phi]Hó›Ò'~a²o©ø6Ñè5ŸÃk ÄžÑq³‘–áôŒìºæ"í$~:÷æ(Tæ{6=w¿åü”æÎûšÚ—Æ&vÅ´†ƒožA©ŸlUßÝË­¥¯ÿNÆAÖÜQ¦~5ß]>£ Óbâ&P캕¿¾:ü…5,V`å©tÈZÒ Î&/éSÜÈØ;Â^N”P¹ÛÝݾîy+¿ê{¹Íèwí] Æcã_xƒzâwÐÈ$€%Õà–Z My£„7ê=ÑàËÉœä¼ÁÜ?­o$ôqBê•,S>Ù¸Ã×NR{‡èg^2s¢~!Nô¸È×líhB]e•ŽÖÇ~ìdnÑë¨n'R 2ÆZ΂e=L=ÛrVlÙÎÑϦçå›W¯úXg¢]£Ÿ¼˜xà.'Ï® ¢å%õ“ÍáÜš»Ð¬ð‰UŽÑ zk­¿–hº}“¤ñRpY“­ ½+x¸þ°¥ïü¾Ð6ƒ¦ýÔ,U¬ª¢\n¿HzwJ Œ=ÌÂ*Nž’Këº@Ém´Zm­eóFÖ"ÝA¡³û9â•ÛÃ^¬‘=U¹¨£‘D²Lÿ«…>öõ/'Ÿ{:çh›k†J#Diô7ý¬­rÉu½ö¾µ¾p;­Œ`üà.³¶ãtl .¼~À°VItŽMáˆfxi!äS*×»œµ“ឃû¹š/—¢_œâÈùæóV‰ß­ ¾U•Ç„är¾ô,£µ Ók`™Îøn€¶?Ѩ±÷÷êÃ5ཇ_Ò7 cÍÈ·ÕµŸ¥‡WR 3½—Õfùö¨A·^c)99[^aåVdëR¹Øëë4ìíÏ\&i by&&†íw±ÏyUv°ÙsÌ•:ŽÿðÓ·¹â5òÍ|¹#í(´W§°z¦ôAç'.UˆKéìÒ½§•¬?ˆÎWäsx:Ë€3XC$ôÔF½D±vâÌÍÊ£ <*ô.9ï=c;\›ä>¾Øº‘pY×þªø-qŸ7•ZÁƒ¤†·É.ì*½ÍT’‰°ËŸŸ‹;D|†]‹ÝÐOÞÌ“dü%<;ìkÞVþç¾ÕòÛÓ~Û„›îx… Ayäšvv‘yÙî³'J*Õt?ÄJJx·¨sEéf__m1¹à³>ܵ´(Û†ea5ÝÍÇóM¶_|—[ÁþJh{À‘ul¶u38+ogmýyd—ë Ï7§ ó’öÍx¥îî£*ꦯz^X°·‚ý™r¹3ÓÌéÔ%ŸX””<;€*À“r!tu½Àÿ±¸Jà;M„ÖaöbN¾hsÒÇ&h­âŠVÊ?›Å:t‚s,+å?Ê¢ sv“åg‰G茉~¼¯Ðn µ£ž O¦eéQûÚ!û¤ß f4A?(Ÿ§{]š“Ír±G;pTŠ ÜÂÉ–_fdãMŒˆ`¼s;Žk3®P?‚„Žì“öäsoù[¤ß,Tí`‚¶7õCtg¥ùªå»/‹øpº‡32Nš¤Í’¿ðì¸}”-A£æfîa»ƒIŒò*Dž¥¿`]0%¦6ñ°¥Çå= tá4oøØ²QÀºô’ο¾½;š•oò“µíËcà»%ü¬‹«*êI‰Uß‘¾œjP³ˆƒ.~œÈíéæÁ‹¹–“¸*§i±ÈS@Äç©}n`×Í! • ݉u»yh|<Ÿ„ÒXd˜h9AÃ}âó¥­f’åê Öfªùq‘3nž™U±v3ï¬Ð¯ºBíZLú;NFOTæe¥ìF‰lßÐ\.<&X¤[”œ ß߾ƭøQÔæSÔäg—?ž0‹r×=lMPª^|­ =’å3rR}jÞÖ Ü‚œÜਠZ6¿-+ªÉcÆÜ­õ3U²Á£~0¹gØøü$Tæx$ŸO3{(¼Ø†Ñ&Àû!¬<$ZÀcÿì)c~mD*èlL@P/>럢ËO˜Kù‰£?ctÈD/Ì‘úÇíKý3½ò“‰!È«¶óiÏäØg¸K/ŒWp®Î(ý Aw5#[á´÷ ÷A'ù÷jEﬣ;4š:\ˆoÓ‹^¤*^Yº!*Ú²nŠNÔOZƒ?ÎZ€î×T÷uë'*TˆbN:vj¾îåÃæ×_·'Ûy¥ìŠ{à[[94Xì[‘€Ñ¶KŽÉðØ@^½È ®gOd^ÑMËàTÌ:¨ØQÃúO<:H ‚ìDròõ#íjäçeFvs'"‘m ¶ÂÑJ[³¥ ?ùTÊÌæ]z>üÖÝîßÇjó(îKòe}é )MÚÆðW17ê‰ ÜN+й=“åiì(€¯Éù½ÛªTÅ•BQÚ z½9|½Ü+LåΦ÷ SÜrß'yß&Aô4ó¤“IÜ{æÝòY>4Rߤ™Û¼ìúR¶™EkWðeés–¬íW­Yá» æÉçè—•^ã%Q šNqZc«’-Mn)רh‚çòg³à!Ë€EUf·–ÂûÌèÞºþ—ÂŒ»Ò¬d‚&"]´g³%okÎ[°Ýc©aM¶Å¯-Î*»‚ìÛÅt Àïíi4C#6(’ª‰í]k]ïöj5¢b÷Y³k’âcļz¸ò¡L?BA{L¸Bá"¦°à€]ܨ/{x>a2ŠõOÖÏJ®–ë®°ò˜´” ?Håî$Yª`ã‘H–&ì l¦.ÂË k™Ï€^¼ò6=§R›õÕûN‚Žjx³°Ã^¿{Mmò ¨V45¬}ï£j8™±ãƒ@"GxøÞƒ˜êô:¢F[;Ì™ežÚ|ê2 ¶T“¨íÉ—#WK©³ÊØ· õD)å[ĺàÊ;¯ƒ@#zNгéj[‘×ÛØüÚ/%Cï­ì³'|Ýožêë6¨E¸{Z7?«,¹î=iÁ 3dÞ$çFx¶ÒƒR?ü¸ÓAÚÈn%ÿsļE±Ñ7}ìùMFèž''ø5áªçõqö‡.ò5üY6#TmËŒ‹¶-à áÉáœ()”áœcÕÛoVr•5;›~2ä¶evv¼ŠljÀ±Ðóà‹Aßp\­ó¾ç9Ÿ &HÖ^#¡0m#LVüÄSTÑÍBYÀöŽÂÞùŽÑT­=„ôn¸Ä5‡œ´ZìWÉGl¯k®åû|š5£ü|+§ÃïˆÈtõí=NIÌ3^×Gáå‰ÉÙËÉH>ß6 ¿~ë@©”¸è8ðUôx<+Û¨„n:®E h¤G÷¹Aœ`G;Xõ&R£ ¶Y@ŽÆ6¼ŽáW§7$†çR©N¹ñósäÜÆÊhZy50½k)7ÿ^1Á)-µòÁÈÍ4Qù/ñl»kÙwTŒGIj¥z³Ü!5Ìk´p?¼qŽ*©"§ÛGÍÒž?šjŸˆ>î7Šõuôo!F1ÆŒu·öpÊíËí|݈{¥Úκ ©\qõvˆ¥qPH¨ë z-ÏuÌëÓ®‚Iú™#…Z'\b¢wq×l))Î,mÛeý|ºUŒücàåk¯â–îwç&íŸ=Ä+Q-2†ì0MŸ.Á:Gx§äN±±?Wù/¥/ _¦îöm.Ÿ¼œFm3o@ Öã [—,C“ýÜ#’b#OyCÒ2QýäŽ4Ÿ:Ç=±Ó¸Í?Øz^n%×Ñʳñ< ´Éy±ˆã^í¸b¾Ë¡H)q}ŒsÁI)6ÂéF5*ó‰Õë¾Y`Oè³Þ5ã—Þ.D¼VêƒéšTT¾d·¢ˆYy#7ÞõÊñ?áÅ ÞY#óˆvô8`òWˆÑ6U -YÚ»š°/š¢ÛÕÞM¦ » Y.êŸZeÞd2¡ÝwʡȜ«+òÅ&ˆ'õ¾>u’íýP:£ :1yl[uö=kh­6ëZ¹OC¶V’½ž=¼5.¥vjBÏÓO9Þ«ü%PYÙ~à²IX¯ÊiÏ({$•8¹ÎÖÏнó–kÂ|ÞnгR).…ä­×ô­G~™âàîÒ•@œ{ºú-<ã½_Í×ñ’ŸœÔ}e1¡ÙÏ« ³Žc'”wÓ{ËÈÃû{²®†·‚N‚õÙEÒ¢R ù V_µØÙ‰lbËÌÞˆjtM?ÊŽ¬¬äÕÍTÑŸˆb;ËZ´áÂê½íðŠ]@Ý|ÎÉéšH^ U-@ŽŽåñ‘s¯©ÊçJY!ÙßxcȨ©ùœ7;øÒ ú>›—xÔ'ßk=R»šäÙ; Õú”SޘŨHGüüñµWbî%|Ô ›$¢ÊhK^NÆ/Ǭs0YnÆ£ [ãúᄫͽã±â÷iÛ7üÊuÆ}[͆՘™.‡Rf’§ˆî§©ºÕRÄHT'Èÿ&n iæâ`ÒnÒæn6OqoœQàéccmnÑØñ’µ‘GÁªÀ’P‹“Ç[éjM€ ü½f £¦¾ÔÞv¥Ö‘ãDaŸ½ä<ömZïŒKu”­°¡ä.Ýé@©0ð¦{tH ¡"áÉô×ÉqK´« /Óž¦eÆÇ.(w\Ù-Üâ#7k{ƒÒµ"s#޼mm™žW åX">â3:–F.e†ˆ.õ(Jek~>½Ø"7lrþØã¶N¡ý©-2[#§ÓîŸS´Bh3>*½ `X›ÅÏséž‹R õ3‡qŒm1I^‹rW©J7:pcu¨Ëí½yôÖ½—U~ôž{Ye.EÏêªB ´¶V•Ìà*ãpšèõæ&tèq誼2(YŒ)îðnbž˜£ª§Í¢EEKŽû–¼öšß!0Ùx¡tùcfï£n½óý™(3õê{KoÊfZÄP=À£ŽA–Ž:|#¯­0/7¢ªú-ª·m°0rOÅfåÉ1Êû{k¦¾½£näÝN€Ð“í–£¢”‹åš-™QÑ$וc_þšëk±ô¹Ï:ç÷œ|IÖ[=b˜wØ›ðEÅc¥V¿|p(2ÃxÀªZL­#‚Ó+ÀLuGåÁã½þG6¦22M+]¥±{—>QŸè@{ó‚.YIÂð'|¥+Z¬ 9Àñ°é{èV´WHl‘`pm¡}ìÝ£™p¨R߈𠹹ÇLYte£ýD£ç6%õè|Îvàa mú‡ÅÎîI>€xù„“Íxf5³Å“ /×\¥0õ–XeSfQE¶ø„eV«%ÒêªViŒšðò(êKÆŠñ¨¼ŸçϦ89}3ž%*×6)ήŒJʳWÒæ±ÕMËÁG†'ðjÁ3ªòUì6ŒØ´Ú(KèhÌSsªžÅ­%X×^P:Å ÏM=6£xX4%3B¨œÙN¦îx¨>U•ž"yN‡ ·Ì“©ÅœŠ«¤ °K8IáíŠÌŽFneÜýi²¿òýöÚ,n²•–ßn½¥ïkª›,Cà<æŽö£ÉÒEx•ÎU>X¥ÇúœÚ®åx?Ế_B”}¬>غ3¤¿q¹²RžCî$ÅíEŸ|ƒ½£<«õ6IÀ¯èT©«-ð‘&ŽÄ‘’ „:áÛO„«Ôàý(çöÏþ7ÔʼnÔNRm¾ ’ŽLXëëGª22¯vm°ºÑÓ$¼e¥<ÐÙê¬ü¤™ç#xÅ'Ú4¥XJ³ˆ—›ôQyj߯е©õÉ Ñ+f‡‹[ é±OR‡SØŠKBËNŒÍõâDΜ·ÜTTBoç¿}¸ätüþÕ‘Fì@Ø“·ù½>^sÃƒÇæ¡Æ¹Ë÷9àg^_¨ ª±¯fÒtøñê÷’yÜtŠË}vmþb²Sê•f—dµð@Ñè-‘Ãç#ß¾M‡Oe?Œ0ÉÂçë§Sä&o‹K¹Û3fÛ‘ëh±TÈö\±Ø{–Ò½JuInõLFÃ[&ˆÕTIê½ 6UÒ‡ÕGÌ·Ö&w(på^|¹‘²Iýy(×â #­dKŠ—ŠÙL£L£êŠq5צ2Îz©œò–ûû¬úP+#QÖþuYkèèÌ>âËÚOÕû,œ|Ù©¥YÔJøõêí­ŸˆKOjß%°M×—‰HvãWCz¯$ù‹eßÞ±){BÎ󸲩w/Û+r ÈEÛxÿfén[8‹PE¢™ìË&vŽTâ[qA€F.Ñ¥1d…®3º_'0YPgeïp:)Oà"õH¢}÷ÐX„BFÉ NR .‚ðC»*é úRãïͦ³¸zÓ±¯Cüžm ;cà¾#lvwæ”˜ÃøôÓëÒû`ð(`Cd 4k `êæ´Ràát0c†GÛjìfÿ>|¾ÁÝ»Iʦ…Rì½qžê°¾`Ò”ØT!~ÌÐI—ÉÔ…§éÖG3èƒÀúD^`¸ƒ“˜Æ÷5ÔôÚé¸Å„ÿ9ÞìD„ ÁO E,kÜñ&hsý×Ñ–únÏu*ÃuÝEŽB4| ÿÎŽöÐ endstream endobj 170 0 obj << /Length1 1536 /Length2 7096 /Length3 0 /Length 8132 /Filter /FlateDecode >> stream xÚxT“ÛÒ6ÒAª€H5 ½÷Þ{g@ $HBï½HïM¤)Ò«€€t©"ˆ€ ½ XÐ/ê9÷Þsÿ­ï[Y+É~æ™Ù3{žÙoVX™ ŒyŽ`5Å+È' PÖ5¶ó ²²š@Q0ðß8!«Ø EÀ¥þƒ¡ì ¢Ð˜ …&ê"à-/@P (&%(.% ü›ˆð”¨½¡N]>€F²*#<ü<¡Î.(ô>p€8‚’’â<¿ÝŠî`O(èQ.`wôŽ `ŒAÁ(¿„àqA¡<¤øù}||ø€îH>„§³'ÀŠr‘`Oo°àWÉ= ;ø¯ÒøY&.Päƒ1‚òz‚háH´‹Ü ì @ï0ÖÔè{€áÈ:<€¿ È'ø¯pyÿ …ÿv‚@w Ü w@ 00@_M‡å‹âáN¿ˆ@öz¡0 #šð;u @MÑDWøW}H'Ô…äCBa¿jäÿ}̪p'e„»;ŽBþÊOê ¡ÏÝÿ¯æºÁ>ð€¿W(Ü ò« '/~S8ô¡XSå/"ü7æ FD$ÅÄDà‡°/È…ÿ×&~à߯ß0º† „‚.…€Ñ„H 7€òôü§áŸ+BAA€„8‚¡pÂGGÃ`ÈŸ5ºÿžP_€µZ~‚_¯}³E+Ì ‡ùý›þ»Åüjf–Z*æÜ•ü/£’ÂÀ+$ à• ŠÄÅEAÿŒc„þ•ÇøjÂ!€äŸtÑçôwÊÞi€ã¯áü3–­\0€ãßB·¡ßÿÏrÿíòÿSù¯(ÿ«Ðÿ;#5/ì·ãáÿ±Ý¡0¿¿håz¡ÐS ‹@Ïü¿©æà?£« v‚z¹ÿ·UDOƒ"Ü­h^A>‘?8©õ;@Q —?ªùƒ›þš76@ ¡¿n´—€ÀÙÐCrCß"H´4›Àèú羪pÂé×° ‰Š€žž@?Bt¯Ñ+Q@€ z*À¾¿Å àçƒ#PhºÆ áIø«±‚hÅð;AnHéòËöBÞ@† þþ þÓÝ¿q!A¿ó¯ ì ~è…îå¿ èè0tþÿDÑ ;î…ü7 xÁPPtUÿÂDüH(º;@Ïߨ?Êyyz¢ï€ßúDŸÉßëßì ./ @Ò‘®Ï#»®é|x·'p×7zâR,‡bEQl‹O\tðòÔg*98ÕÝÏ6XªŠžY¤ã:ºžôµé/[ËÒ(Ba¨m*ð~9ïw3:!h§Ä³ã6ÉS H¬±­ÙÓ;G‰ï<ûXzӃܱ’ܸÊ/ɘ²èP‰Š…=û˜,™X6Pc–6dIw<­s¼L4M§n0A“®”ºh¾ømZ'厽{÷ª`x([ø¬D{°^¬.š‚†Ò_‹©pNß»vHÌK²Í”…IŒ¼ª$fcô‡˜¯|—ÉPвRhbé1¹nx?àáûütZcq?~±Ûöªkl æÁrÄ@5–bÑ·ÿr/õ…¦èår3.U1T£ö"¢×ž3¹0y.Ĩ¨Û ³G]ÚJAriš9ÙL˜´Ø„|ÑDg#GÀR*J1tŽŒ„Âí¨ŠáÙJ­Øë'²ám²™¡Áo§On©$“5nÞ6ø‚c—âèyÂ/„o§]ÔcåâP¡Ç®…I¶î§|ßU²œ ;_X+RúabOQlSIü–ôyç¢å¸ÈB±)Ö —Ñ;²iÿô5C·Õp}NßôÁ`7{掯FË×Kì Ç1u©æÈ2XMk²h‡ò»aª8Sëa N×E¾çÀkHëÅ"Aë+i‘­0»Ý½coÕ•TwHÙ—¢$…7ëtCÙ$°‰bÍBTˆ?KÜ!N·„ -Àù0\ ­„[0yí•»%ûÖ,ÚâÉ›¾ª{œ\Ò¿£èh¤ç×ñ]a•…«I|ó6^}Ïo¡/öÊOÑÛx¼¿ckþN%\·7ÖRd½â<º¼Ä2yþu‰…ê‰ÎЦ½Pûíºö*„Ff¡ µï, åè{o—M`'‚øúò«¹Þ}£<ÕŒ³òÃÜöä9Ì‹ol›9°ûj?ïÚ„èc¹>cT+t<-¯› âŽ+_ÛÊËÞpàGÒ{CæÜ©{ºû‡÷›‚®`òô ®µXæ£:»£Ú¶ÕîÑ[do ‘ÚÕú£³ILš·žÏ=ÿ¶sï³ù{Ôœ¹tnïëÓœ/ŽÕ(®×s·MŸn~þlÞV«„aeöœKøb×Òá•΢Ò4Ì+ê>H71­˜­Mÿ V0C4e¿õî(gd3q­€øÜÇYV’(‚Hu¢Ò¯iFþO)ÎÏ!Ÿb¦íÈU\V/d¶Jrs?(eŽï-}í^.D AØ•ÏýÖ>4Ø<›{¦` b”Ho„ÓŠ?d ùxK;ö»ˆ›¾,õá…S@Zå*ŒçBõÑõG7Ì7¹\$âø±¬W˜p®¾¾˜\Ú³At†Û-²¼`KØ>?³%—€e&o½@¶³EFöó§|ø`Ç™Çd²ý2H|޹Q{´<Ý´q7¬Û˜¹X:y7ó»—†q¡¢èY®˜’,ùÛoøÛ\“MüºÜ䯩.標«* [~Ü Þ €Ø™áQ…¢¹,îGôyP’[7U à¤|ôífóÜûù€jb½ªpŒcVä—êO'…ŒöÅ ½Ò»á[Ûµf+[“#½Àª<Û‹]ùy"ÌÃ3GT1,=Ç…L,õ§~¬÷€}®Ñ§×M’)Æ;,ƒC&C+‚þº«vO±«®~é²&«¬ÝÞá-ï%FI7"?ò¤»-i~Ò´*£‹›€tWšCÁ‚i©£HÛÚwùŽþêÊò̬áàwe>L»Yb‰ãeF»,_´Kýì~Ã9Ú¤ú`i·Ì‰½vp»—Ž·½•è•?Ý€õ4)(f¹—.ai•šÈ}<ªÞê;íˉ©¾‹åDÐøyË‚r³6>_G£ìM‡öêÅyk!gÎg¼‡…Ü‹oA–~™CeEù·)ìu_'Ü8ð*4á Ü1ý¡c¿(˜jœ¾¬BWŽ–’:É¿k´ Â¦àˆ°Œˆzyå¦gÞbÙw¨¶$³«Ô”õÉ­éí ÞºÑ!ÇÊü”Ð+™¦â÷›÷ÈNŒ„IÒO°@÷ÄÜ«ƒ*ÃíªºÈb¿ÇéÉ+Þ÷ïs§”1¾ÌPm%½y¾Œ•¦;¼¿È_wÉpwµ…õ]œ½l ÜüÉ[ïh‡Y],ˆ¨ü€ø¯¨Ð¶E°X‘:¥/!ƒ;p§c«Ýlþt=^½²&® ¡3§ô_ó,²?”ý¦ÎÀ^-2m¡ (çè½7˜Ù}LãÏ¿ÚÔºì?«3hاr‹qX„—ôˆ€ê¡Gk<­•ñ×¶sÅ‘˜ZüئW4KmŠ[íýÝ(XOã¤ÆM±5†I˜/rR·„!Ê Ž«ù \•\)ïÁðq[‰¹Çx­!È)Ž_™ eNœ<g`XúÖ\3h&í½s'Îÿ|Gbx(°·LÎé§«ŸI^bØ`‹™ûÈÇì š‡¯•ÇhRÏS—ú:ònIúãtn›Ä*¯…ð¿Dw¤åDãT ¸³%†=§æ5#\ëMµ/)|]‹;øxp'®¹žŸ jæÃTtŽ ­°„îZ xላ®³nv™iËîu\0ï ÿ5IB‘xX—ªèƒl§˜ÓRDRV€­rµË,5g¦éX®§ˆŒ9×ø7¼zßÂ'Ê&êgÉCÚ>†Îï= ¸í(HÂùâcOì7é˜Å_¼úùýÚ˜œ$¶e¥<àc.wH鬲føJB»åÑw9”Ä8†‡‡LÃõ㳈HÆ¢ŸxÆyú‘¾Ä¤ø£üÒIP»¨Ä­¦æu¼ë»š|:¸€?uµú3†ûã^$ï«Ì ?±úGÎÝÓzÞ¾dQJ[2 ŒÒôxÙó”{îAÜuúƒR†•ªoÂÓ<<êÕ¸j*?7®åx{êÏ9MÂÅá·KÉg± ’\õtRŸ{väFºò¤¸&Öt ˜‰Tƒ’ilÀ4Win†ªNÎéÅ4çÁm®½0 íÌ·f­ìþËVç¯V8 àG—S·›æMº2ÈsSÞêL®“híŸ}²SVÞX—ŸH!e¯¶ 0R®™Æ| ÌÇÈz€ûEÔ,r2c¿÷Ð ,èêûl ìÏ„<ôï™Qý@ƒAÜ]džäicRÐÖv:!·³‡b(OO¿l k(¹òh¸xþçy¢´ã¬ú–ì%z²¾Oüj•tt£íã%Y(£‚ŽxL>fz0‘ -M/‰AèðÖ‚»ÇÙ‘V ¢Y¡¡ñCVØOû“=ÅÙኆTŸz•Í.‚YN$UK:Ê>²•Ôì>ðÁ©·'¾*S;ržëmy¬”»»• XYsg£ûáó©“qÒûë}k3"-xñŒ1¥)ÓG‚Ï ÷ÞÔžó,‰]lváÐ?ñ,­°N}×ïí𞨫¥ñ["õEoˆï•:ËÏ"ºÈ²½)¾ âöÉÛ¯3^TR¯Nõ¨Mäf€óRÃeïÕõC˜¨oÝçï®æÃåßñÁ}g$ÑÁ¡°¼ü(ÏŸÔÖ­0¨Ç¦éž]øî©œÓ+÷Lðé˜Â$ì.‰ùOæY3eÝëÇoܨçSqdü® ô¼ˆx{e•ÝC|åÃǘ(½æ²—±0¡çdmnŠš¶1œÔº×¤!­Æ%Zf-Ã[hÃqqs“çÙ*¹ì’FRÙ¿ƒ0H?ÜûÎöb4Pf}r¨4ûª‡q†ö°áÎϽåjî I]h«Lq°»ûR&×ôS˜¤“}f…a×Êç-ör½|õæã œ9̡ʉ>WÛæ;ðsa 9­bùe•ÃPY½ë¨[ÝŽpb†Ä€‡ÔŽ–rÌË\»zF'Ü*ý„¯â¯1V¡çq›ÄÉ*>Ú¯mKC‰ºéR¨öž¨¦Q• >ò [¦ÙÈ%çc¡2ÛØq¡E\ú»±¸¹±ØŠì×SaŸ€ mÅ_ëÉ:•±Í³ÎÆÏ¿ ?¾Ìö¸3¬’nø17Ûq£’ŠßãüVËùz“ô‡=j3Øö?æÉÓzáû†oð~–¸k'°ùKËÌ÷↹ŸmZCÅ_OÝmÞ/xzÊÎu÷æ¡E¨É-øJ†n>ÁíŒ_¾JȆ³p| rÑ^˜¹ñ¡äÚïÇf½ëJ@5YS—!c¿rÝ·ý²£TÃ];ïùèXuýØ5³â¬¯MŸhø”å+ËsYJÚ÷á‹ò{N  N2[ájÚ,’½yúy V.Ý úAÚÜOe…ÒÊNO7rpF==ºi)]oŠÔÈiÉzcAQHTæ¡:ûÕe›¬Nì:ÎKÜö÷óÈK8ç9Ú¿æ—µÜÖÕí liŠ$~8ìÍÖZ?v¥¼¾-¬‡Ñªc…lò11ð H½‹ìê˜j¸6(|ÄÍû¸®ªØôQv£ÚgÓkæNíÉèhîš®Y˰8…¼@ Gæ%>Ô‰Ž.O§YÚÙ O²ÿ‡¥&oJÌáÙç#i‡yªŠÓøRÍÏžlXj08 ¦·|èÔ hó‰1²³œÉ£!á!|¢Vù&KCeùÌŒVÞã Ïo&»Ò`UM¶3|`dX)÷rù²X]{ÉÀ¥)X¯Ùº [sÌ~/6TÿÄä®ÿÚ,„`‡@f.+#á{Ø-ôSYUpA‹½ëfã‹C.i8ÞJˆMe(ù=!7H ðá¥%.ü8„l¯ùÌ{c¯÷"Dû­y@îÜš°übrb•î™í)siJrïû)Qd98¤q"•î§ÄUXP$ólhJË1™”Æøn¿@Þ=Àº4µÝz‘&;cÿãöMšhs_|¨g¨.JÎO¶>šk3ÌQ«'ØŽ¸5D§èÙX co½*Ïü~~Ëæâj©h”^' s?¢Ø M…"żôR÷—ÖvY9ŸId”~áÅÉü©IúëªqfÖ€w÷øÉ÷ÏÊÁMò½ZüijÌb¦| r;¸˜ܫچs‘4Ìcs53²ûa§ÈOk‡¾-ÛÅj¦×>ßÅôßñ=* E퇈’Ÿ”˜}¯jâ®%/{Q[×÷A<¾Éž÷l¡jØog{ìe:žIQ‚²èwuO禸/ÉD_³$Çd'°6$·ôÆãg¾S¯ÞZ’(ÌÞ#.®ÇÕõÞ^çp¥FUDl®ˆO§Jেù¶“¶C†˜¯ÍïEé/¥Òƺ“ð%øˆÿƒ=|çe—`ÅIŸtÐ}Ò“(ÝÇ ©%pr£üeTô&…U®£v¬s vÕÐné@Õ)…BBIm`žxÉÌ:¬è`¨ô¾äÕæ™—JtAzIÐ9[èÍK I¾›…ŠÎGZo%wˆj/·<Ѩhy,Lò¢Ý@nî|A ©¶#%?€ÊXJÁ56ÕŸ “¸ )»[—½¯Ñ— s3ÿêVVRÕ9nQÏñüˆ¡ün)Õ€ŒiÅóE½·:'×·ÈEa²9¢Üt´§Y3(v‹L'*InUñƽ-\ü\§‰€!Û³÷öÇü14·‡OÉ ;“¨Êœh½iYbFãZf]þ¸ïƒð ¸ø”Ë”«úÒ౸š<âÞÔKWRÉguÌùýÎéJñ&‡– Ž’.¤•ì “õ«Ò…¿ôr)ÝnŠð‚wb±¼X×&ÙûYd¯ þáð†ð~KߺCx¯$•!ÿ˲mÝ&ph¡üRÿÈèÞlCË-F²—-,ÛørÇ“^‚›O{5ö{B23×YÃÜØd(úêë©‚ÆX­âUú ¥¬º©šákŸˆQå-KÞ¸Ñó6´íüŽ›3ƒgºfjTc¢?'¹Ý4·…Ì%å YAU/dÓ×/[/„Q1­5?;Š]«£Ë™+š?^¥,ŒZSÍéÄ»a&YÞ¡jâ\BˆŠ»Q­ÿHÀ‚§‘fƒÁSë;x¬Gú–iʨi“onÅ,áLºTÜn·›¾…áγ6ãbÌknu'™kRëû‹†«1ÙÊ­U½íÇM@XµT˵¾èºÁV¤Ï ýtœª@<“öšpÜô8³ÝöÌç‡?$!ªÃÒ̲?Æ  E¾|7uäá¼òø~Øf<þ—Ó}‡;cøi9m땚bÔÊYÚ7ÊXü> Ý)ñjVnj߰<3üÆ8£¬sQržÚv×7LJà}O9C”ZÛZ>q0sä–jºÜDt`«´6é‘÷7Öëû+õ&Ö‡ \Ûãp0f<³z¶)­kâz n¤_ü ÊÛw^ÊËÉ0õ®—•Ÿ=ås'æôê§ŽÜ;ýúѶK°zß÷ìb>g›bÏ•ÉzU´õñhúc ùÎ >¶r³Üñë½àýAµ/ŸíH…½k F>èç{ÏÖÓ· Ýò&"ôÿºmÒ¶öu\`ù¥ãƒËü[Öùþ~Sió,Ø`ÁÚ·nó¢ÙNFŠCQ )²8~ær½'±[r_Sëwü>ýl7ÝøŠÿû/…A éP@Ö‰ŒŸ’£xŒ‰Í7¹ãG¡*æÍq&>¯S1öÛn¯­=Œ ÌÌ9!Wì^GcTLro…¿ 4'Rv=µ›–qs>—7à…~r{ƒþÂW!2£ÊfRßW»ûø÷c ‡ð/|”œ§S?tÝßtæ3/VÃòO.ý¥Ûs4ýæmTqúÇ÷â<<+Ýt‰^(à* €ÙúžgæÀÇâPÆW_²2„rîò{\¯-÷U3ßjñ"ÌQ§‰^s¿\n@VX±ÓâS6¶W|Îy¿ãkøœöâ¤Áv§ÈuèBCëçMƒA¶ú!˜•BÛßF²8>rçûæÕ]Õ=<žM°™Ð,¹¬.5‚‚“’7L 4bö¾Tj–ÖtYh¦MnT0vñU:3i¯¡yÇ“ý›Ï3©"\úþß:ø@mç® ŒK¶ïë«KKSÉ{²ûâw2,ïå6_^¿:ÙãQ…i®«ÅgòÈŸ»Al Dò5ëñÿPžïÄ$AQ¯ÞhD©‹ ø%ñ³iؾÔâ Øöìy_£UÁ¨šŠv©WgÓ+o'Â~T°ëX5Ú9u¿]J{ÖÁÇ4eB‘•Ì´úÖþ'Ñ¥F]Ãu|{â»øèÔó YCwW‚~hôº[¡ïSÖöÄÇjzÖS‹ G^ô,;BåV ¬ôK+ŸDƧ;u8©Í÷‚@„,Ì59·O(\µ ½ñ•Øimc5MP²¾Øz.¼[¯Å‰§îLýœÛdà,®ºï¨â£+z,ѾNº©s®ŸÛ¯—’¡Ð¢ê¿£áÉRåÄØqÕß…뻊‚ªõ`áÍÇæw°Õ,ü¨I˜õ4±nàdP¾"–EEË”ÀÀ(šC±…·³›khÜ ¼ ŸÒºÇó! 6\CT³ †B5a+"ÒV)””ÎwðVô»ƒ7çKY«ÞŒráW\ëNÀ«•nD(` Ô–Iÿ{½½{½3ù%§„Ö3&«¡¸:õá{9|'}‡ÞÌÐ+Yï_ÑŽŒjw¤5)ò/ }bmÍn$¹(ª¹ßbÆ^‹oð²ÚÝ>#JM/ëÚ×§õåqÇrOÂ{õÑ!~6 ^rt"Þ{Wëtç‰lvý#ªýŠ3–Óío§µ_!G¤fœ¹#^·–X/Ê“j9öùjèz s¢Ìã6-XÈ”yÞÎì¸Ê—Ð=€’cþxí×"¬o…–Š”Ðç-ep œ°Ÿ©æ˜0åÁ›R¹Ëî|™aaZ{rfº7Ë^ Aææ¶ö™Oøã½=ažòùÛÉû¢?öǺ%x³›§¾ˆX[ѵÒýU³þûF!—8¥‚”\×ÙLMP‘w”3ïíÄœÝWÉv|*µ>³(bŒq™Ïwþ”ŸÁ§âß?Ohá¹]I83v_Éf_ áòuÔ+ÛÌøô"‘*©æ†¡«Ã³(7¢A§]n©Ò¶~>÷¬Â…GÍ÷‚YÏnÙ<õb¿½ñìœ=hKâ™´¼½v¡™O‹i'H@foÚ¬4­|£µû„+V•ï+æ>v«ŽŒæsŒ‰­òT“¦Å”Ä+nž°KÉ裂¼ÛQÁ—O¯‘ôÈÅ$Šrê΄;½™…ú·l²{Ÿ‘-®ªÈOb<¦©Ûc^ípó ¾yJ㤙ñ9õmF¤iÐa"~vtôu©Êñ…`[‡ÇH •g1Í"-»¸ÙÌtc(V\ú£Â­ºÞD˜æÉ̇_œ½Âõ+'’kÚ]j¼&I¡´8ÚDîå!ÇybVg—xTqû1eæQ žèè%¾)¾%MÜ ¥‡€‘ÆŸÏâ¼0üq3ºpD±tÖ8@_¢ZVÉ|žáð“v5ÅO®h&ŒêºÑ¿½¹mW¸û$¶3¶ZßTÌ…d×>ƒawÏ\ÃÎÉדj˜RÔ"ÍlL¢œÖ €•‰©›ýÝXDuµ^ákjFnžŸª¢ä[ÆÂÍSŽ;,þ2õ#_ÐÝP¶Qâvø þŸ˜*Cö›lª. ÓØÄ—ý8œug2±|þ‡ì¡(’Œ Ûðø@÷±­~Z0Áç“yc¡!êÀ<6 ÿì.l²T˚˱9¹‰ô8óçÇU¯|ã f|’Y¾F«Te6ÖÝ-s¢)šJQ€§Ú@ïÝD7ª‰'ħú„ýƒe_hñNÚГPíV> stream xÚvPÓßÖ-Ò«4Ò!$@è¨Hï½£H€H PB”^¥÷" ¢t)Ò«"R¥+(M¥ƒÒQ¤|±Ü{¿ÿ}oæ½ÉLò;k¯½ÏÞç¬õ›ð󙊫À0Žp '‚ªú¦Ö2H IRñó›!pHø_˜Šßî‰E`Ð ÿ‹ ê ‡â˜GàécÐ/$,Ë(€e@ €$$ÿ/"ÆS õFÀú@€ ÇRñ«bÜñžWa›=„œ„`yyY±ßéÜáEô¡8W8а£ 0Å8!à8ü?J)¹âpî >>>@( Äxº\ø p®8îé ‡~ 0€¢à&RñÌ\Ø?¸)Æçõ„áGc ^hÜ@Ø`ª­0t‡£ÿõþÄÏ‚ÿ]îoö¯Bôïd¨“åEãh€3 jèq¾81 ûE„"±B>ÔŠ@B „ßC*Æ(aÀ¿ãa<î8,‹@þQâWÂ)«£aª ŽÆa©~õ§†ð„;Ž/ñçfÝдÿß…3 sþ5ÌË]Âðð‚k«ý¥ ªÿ`.p’—‘‘–À=p_'W‰_åÍðîðßAð/˜0A ¿;ÆàLˆp†~¨ü±Po8çéôÿß®¨À` á„8Â]hªÿT'Àpç?kÂå{"|¶ ‚öÀЯϿŸnäà‘øÿÐ߯„Ö-mu-cÑ?ÿ;vëÆà/. ——–#ÈUR +'üg#(âo ÿ¤j£1ù?ÍNé_ {ÿ½¡¿Þü³–† Z8@è?·A@N„/ðÿ·Ò§üßþ«ÊÿKãÿ݆ù;,ô;þ„¡(ÿ—@ЬŽ } Áèÿ¦ZÂÿxVCx¡þ;ªƒ| ‚v!hY, IÿÁX „/f„À9¹þQÌÜü—Ó4܃Eüzµ²@ ÿŠìåäFx}` ²ü‚ÜóÏ}ÕÑNØ/›IBdPOO(ž DP“$ðüƒûþ2@ˆÆà)ÂŒgŒ'Õ¯k$P´öJõÊN^žžƒýaÛ­»÷…;QMOaœCïÖ„¶~¯Váð_"›_lJ°î‰„àÞ=òwÕ#ÏÒó¸å«¸³vöMÎëžt©ÝBÝ—U2áLìÌ~:þ·™ m÷‰—¬ª7l)2FÙ¬¬U|;ßý*‚ÜÒˆ²G{Î7š ¥ ¸éÓF4ø@éÞPý€!™ŸW»ADM¥nΊ«ýâè¡Åù¾`óŒ™ó’@¶ÏS_tí:ÎæUåÔ¥ìÆí‰eøî1¥µš”=ZF}×\Léä@õiScšzíæH„(×,À³“®À{KöÔb‡µõÏÂ&eÉsnØ@”Ÿ¥ÚéêgØ–×<ÁÊ<_µR i{ {4¤½¨tëE‹cº ­:k„aGsF{«w«¤ê¦"Åê þÏŽüÕ’­Lm®O¤àQÓø¸ŠT·ºl\ÍÃS/šƒg¢Äò#Ô ©2Ú¨¶tândÀ–ä1 É» ߪž±×Ð}ÍáqÞ'º”º)¯ÿ†M Û¿ÜQ5ç¼6§% ·¹hß9¥t9²*ù3¸‡I‘mKø@Nl‚_òük±Áš ´­Åcí¨ø/$m7B¤Y¤¸ëÜÔÄÊ9:–¹º‘뻞¨Áîõ¡ÝÝåVùŸü§‰&òlH • ý‚¤+«-D¢^·_-×äòëÐäuÈYd·òŽ{m¦¸ßc¾/x‰ŠJeιӻ­¯~!3BЉ˜Ä)a&AW}^…ÁSƒ¹}¢†Œ®â…úIÆxc¯e^ˆF®â˜á ó™üÂÀhkuÉ” ˜Š³øãU°þÖÒÇ`{WXØÉíçfî¢ño’SOLEø€šÉZ _#A*YDÄ”L¶ö®LBØú_šœD¹û3ñlӘ밪­ZS,iyörp´Žë:0C¬*2_‹Þlã–’©xv‘©iG¹×m4´Ë’Õ«vKÚŠØõÛŠÇ(§åI±ØT»Ê¥ëqW‹6à§#êÉüðêz`Ávo.µbrFxwãŒÖøSË‹˜Zn~(OÓÙ( euv´J[¹@|È¡Aõôz8$'=Éî––ˆVø pVê˜1º›Ÿ†è¼4ÆåÅÃÍÉ\%]Gãé‡Ù-;ÜëÆ¾ú Y_ê¿=b˜ÎÓ£¯B¾aØ?èÛžå¡n–°n_©VZóŽ×*€©<©£V”š*Ú(‹¶ ={™¦Í… ‹'ðÛI¨rÒñrWŒ·½tV »¸,[V¾¸vq„˜}\?ÔQÊPYŒeeûEÃpµa>7‚qxš÷¶ÜñêÏxnk[‹ŒVZÿòA65‚á*Þê§%îNÚ'#õèÞ",W¶I¬íŠÓs·VÜÀOî#ùÍ´×0`\yô6îZïmjÝï××£W¾Ë9"?\ä\Û¯ü-£_µÉ. [`ŽÆQ Ç?3’™VH6™îQø°‚“²kµ•„ö`ßü8ÞAŽCïCuA Ó¸¹W›\WÕêœHŒª åPd¸‹…n>œ f{5Üù±Ž-¢@JæÈî…Ò½yÿØÓ>*1H5„l»èzPÀ@gO_Š&óG½ó¤ÅJµuß·{A‰U“qô_Â…“øÞ‰ô˜¦ƒÕ¾Ý}yïgËÄ ­m¶ïMzŽê.*É¢ÔË¢ƒùBŽ–Uq¼1Ó|Y”ë…ÌŸ‘×óiÁÒ$}ïû£TÆ^¨,Câž” ‰QÂþ_¿­ýtiBسŠê‡SÜVéÓäVáܧj½Ò=˜;öM­f ÿ£œtàeÞëÛ¥·î£”Vaß·ÏÖá[%È" 8fBWö]e}n÷BH#gÎ’t±\Ã*8åú”s|°´°›uêøIê%ƒøk²?_¤gÜ¡O)fÒs>/xw¬“îPŠ,¹Dýê1Lù2Ookž½»ÇÇŒhß3âæ†Êi;Ž˜Uº:NyFÿ§¼†cùÞy¹òïLb…>Cêìfž`–{´µï$“- ±r­i³Ð|ÞH Ü5pu~¿póÌ1 ˆ6ø‚f’½EóîA@¾Š1ï§û>d˜F=r°xGÃå¸O׆¿q"˜M.¼ *XYÑÒ›ðžh<Œ8ìí±¸Îa×~°&µ‘VÐJ(áµ6dæKnúgæž¾ŠUlbÛºðÉ_ƒV@˜‘êWƒ\»ÓSÓ™9)2.¢³{­Ñ^.w·˜ïèªe¢$Œ¡§‰•k1É,UÝi’ºB¬!ÜñBu›>­ÐÝmD$[*[nÔV³yA¹™Ïb„è2ÅA„ ?ËМ]~g‚$ÇÜÀÏiÎ=%Pñm?ŒhëÆÑÉTC[#èplÕ«ï\Áö¬¢ð"gc}¢ö‚þ—cƒ[$•UÏ“™^¾H›Õ4îî_ûZZÓi=µ¬ôÐz!{¸¦AQÎs ºsö…K±sH€/°ü|p˜B»Ä¦ï1ó.CW[>í@Çåð¤n'Ý÷Æême{=œ-Á¤òóEý óLô|qG>4v{~yÃ]¹Ÿý6\Xëy/㔾|Ì댺`:cõQzãl"ýIJózÀ÷÷^#Ÿ-vÖÉå,1Åí“r–inµ±°ÖXEˆ@‰ƒï»¤} ;´@ÖEW•—³/j”M•²–L®L7íJFG¥üTikÓìÑ—âA®átU…_ëý#’0§j™–ûbëýWHz«Ã>°…EoûͽnX/Š3»Ë‡,|4RgæQ—ø˜»~·LˆyÈòö.¶ÏLm¯kð“cÖ{H]öR=¥cµOQpdò(ÅŠ2ØKï‚ß2co‡èAF‘$ž¤«Ø!O™èû°iô;òXßåuH=»æLàø´äÍkyû7BÈ9¯íne/P0×îy»´0OÆÍw§…DY×ñD;”‘)¡R›½ˆˆ"X ~ßÉ"•Ÿ«!ñuÝ¥~5cx­sç^ Ù ¿[ZOÃô´< EêgY ™P±‰mnø]’ÙJÇB çôåú+DÜ3–¯Ilt4!\N©ÛÎ^Š î|ùMÝÌSKO]é¯8†‡» odœ·hš˜S3ý Kb¢µ0¯”ž­’b¾TÎZ[†M“ìœwÖ*ͺp³Ø,¼3hß‹Ðo mäážäQ“yP¶ÊúeönášÇížX\•n>t‡xƈ‰·…‘uÕ:dQ5ÒLèYè"ÃÃÂèö@Ÿ¬îãþTŸwCV‘ƒv¢)ðj²Òkõµjª–åAUyU«Íö?¿ÙÆ)Iv¼#OéGˆn ìP½/‰f[U“äiŬÐÓ(]kžØ)8IØš½äLj»§¦—>c2NËH/NíÁKÒ#½B$éoq×D  9Z¼V8ËG$¶P-yôÚKƒÑàd³‚d â×SØÌøÁ¤8X#_’‹OrpZªýâÝ;¾jjc'Úßߢ üהȢ+øzm‡ÉAgÔüчkÚ“q5熜ó)½Š…/¿±™äžIÿr$†šk@’ï'yXÊ¢"éˆh—ئlö3ëÄM%Ë5*}+Ÿ·:W7`ÓÎÑMÀSbÒÖ‚Þã"Óêºä¼Š‰ý²3 QÌL›a>hü‘9qìGòã€ØÚ¬&Ÿ[B9ð´ÃÁήv4<8{È{}¾©·~ÂÚãä(ä±²Ç_yþ¤åu„{yn%þ­>~ÞøÎ³NÌNquAq_.…)¼—ÆÂŸœ@?ê-ê‡ð‘ÖÙT*$‰Æ2»µäæ¼´%Í߯Ë'å²Ý[ºa VÔœÈN9’ˆ%9v³²´cƒZ ëk¥d†©·0šLþ#¢è–ŠGY°T”ì¬éô™÷E(íÏkCq^è‹[fc—»òÊß’>Ö»…ñ$Š?T&'jvÞ×KÉZˆ¶³ï¼[±´ÐÑ;,ôȶ綢`wõ¥4àÚÓ7?öêV_.ÄëŠ 9=B…ኟhNu:Ì+õVvÒûÙ¬÷6û63sì#êrB+öФ]ÑÿRôT ËB ;ûK%óI*ù´àÓÓ¯Â1:L&©n9Qm@פVÑýé¡=. s“ŸÎ‡~¸½£ÂN·¿Æ4:÷)m•µØ/¸Æ_®8\GzÁ1e(i<¿â4¥5Ú„ƒlŠG†:"*šT¼¾ì¤~©<ðnø‰-$ŠçS2Më㢯¤^®çúÆ®2ÆXŸ–/pÕv‡Äöbpõ¢\³åâo:cAûcý>Ôy©S¼F4¹&ÁY–fµ!¥:éƒ>ìY¯ÅòݵÒaü`ýªõI¹1½ÜíÙÎUÿ ’þOâÝìíׯÒÎN„2f"ät2áeiFO:é?8ŠFü„ÍõGZc?ª^Öe‹|öIoK^¡-#Èú}=eÅ·…l$ðí·ÞAï;R§îaÆVgÖFšèüÙ ÒB½ŽÁ/õPTßSKSͨwµ'\…é ù+î|BÚS]šO+ Ô]3a†¿‘ùÖZVzš=vöÅo75’RæÈÂý¹ûz½à|ôß«¥Èè\x­ Èì»cYÉÖ;:äÒù×v/­æâf_"§)G´/Üã¦?GM¹•d*“Ïáøo\&†-KÔksd†Ÿ>xôæÑ2WÈÌüë>¢4›¾f½*æ[@ìç+~¨„žŽ|‡´ºŽ`ÝÖ%꾂ø‘fíÊO©mcªÞBÃþiÂK·ˆm %uç¯& Nй ýü¦4\÷¦bAj•9¾Æ‹‚~Åô/sWyΊAú6…KuÖNÝÕ_ ïöÊ©9ÂË9ºVNÌgðl¾1*¼ât¾¤jb%þ•ÞãoUK»¬ÌÒXDýú–ùÌìL\’qH!ÏäOúAתt›@Êñ*[w·k–G÷ܨ§å'£Œö»IihÚûÅÙ´sèPô‘B~¶rê‹L“‹| ©zŽüå&› T¡÷|ýÑÐÁN®Í;Hô>KAÚ|ö‡ÉÕ¨òbE!ã¥Ç»ZØpˆy«\ï­Èz—CBèž@‘LŠ[M°MŇ¡æªÂîÔÍ'¥wiÁäpÔ›ž9Šþgwð%uÑrõZnÑwRµ>³5OZé\¼ÿ\üýÅô¹[W¶}95økõQvé$Dæ){W8ZŸ8ÞêsBèuÐBËw¤voÔùÝ)=] »@Ëfôoó"É1~xéû¦Ç&o²^|?ΛºYvãØMœRÆùgE¤× tpLÅHÇ9¿¶fjT™iÀ…Ú¾éz™OE5±Þ”#‚ü•YSXYQª00O«Â…d§¬L™ãoQõ³œ|ç[§”O¿óÉ}•Ì£®…5‚gºH~ÀÓH¶­w5Þ^;ëÁ€]"ñ¬L–â½éÈ@wØ¢lš N‡¶x´Qx›fT&sy?G3>4»”y¿ÆýIÑæ9ŠÕò$éuh—¾¢1æAs¢ErÈí5¯YË¥÷ ¯ÄmÎ’ì'Ã&Wàþˆéñy‘«ã¯rd¾´ŠÛ¹?‡ÞwY}lÆL¬ð®Y"]±ðCþq'Ó+Vz—·Q˜Æ‚¢÷3ãP›ð$›#êØ›28ç]º\…OD¸±Vɲ.>ñ½'0jŽÀøÇ‘±½Ze,Àƻ‡¯Âº×«Ûȉå\2½30g[ÂÜ4Éê"]÷Ÿ¿V'‘"ŸcâÏmâ£ÙºtõX~yuð:)2;‡Û•¶9çÝ |0Ñ¢9™œê2%ïeÏmGÊ Z¿7È(H¤ Â3Ø>¦ä‹0V’ƒE×%’f"žÐYÍ"^hM=m„ü ”LDäiZ«‹Ì˜s_=¤ùìLÃ(ÖØ¤ýÔÎfHí®b*!àz¢ßNÄá*Õò&W°F .!e¥’Ûå8‰eˤÏqé.¬O?7rˆŠ³ÿù§eU0*'˜yB`v|‰=p/xø¦¼¢Êþ®…/mMa›YPÒ»>Zœ-Û™ìYͳRw·)¯†Y¦Þ3û\f~»¶¹ðº®P$¯ µ_fŒ¼þa=¥{Ó‚÷`ÄðP”lÂÃì}å-åëóð•u ©¦“¦ë 9Ól· 䤫W ´ûþx}I Ðè}ü[zz}?#ˆêÇå;qóŒÎd½,úKóžÇÏè±ùð©@²qÃÙÍ÷¬µøãŸßÒÓ~ KAJWeÀ3ˆí×-¿‚}Lø¬—l  ¤²‘É ³|¯Ûv“|¯­d¯R;øm~¾ááÕùôíÊÀZöÙZ÷rÎþþš,î'4‹ìÙÂÊѬ³ íM}@†BµaíFÝ9&“g¯OsÚbsë¥{BkqEq‡1¦ÝM;74Ø·KëöÞ´/±´ŽÎ–l›×lË–·j:°µÂòMJ9%Õ–óMÌ^ØvÝ JeZ¸“|oH˜•iq¢á¶ät ÿW…áºÛÓ¨¾Sý/Îëɸ§oƶØÞ[p,”TõÊÍáËwr­úrš2r?rŒçɶv0Ä©®Û/ÙXW8Ü9aU3ž FÖtAOY²;½µœ] ]À•áy^“¬êë‡è.§}#*Þ~fsíGvžNƒ[êö>' LB„wþàjM">ÜÏ?Áä6'n0w´C«ì¨>øµÀס½CîºÇØt…}ÄvDSdó›Ó`°žf²‘+ÑMKˬèënT–]æëÕ ;›LË[äØ#'ÞKã!å ¤…‚r©7ÀY«lb[ãþ"b*â'ÄÎòÃD[ù5x·;¤ï,Ë æîÕ'+ºÜ32ĺ¢wã–YsU¤†ÁAa“¯¥.Uæ?¯ s-(€' õfð¿^Ñò&^¾Õµ%y[Z~¶:<>/Ô.µ™ÙPùvÐóq2ÕÏô~×;•[ÔÁ°Â"!ªñOú0ҜŠŸ È&€féÅp›¬ø;ÒÿUf1ô3’Ý}Tz±/9 ™Â*TíuR$çýrxùÛ®{½güÒáËrT&®ÁÜo1oMd‹_¨? þéÀ•p$6/ ¿ÿÐLz3^æÒ€ÓÜÅ*Þl†8ÓTçþ¿ÛÅøçÏ¥íþŸÀ<â endstream endobj 8 0 obj << /Type /ObjStm /N 100 /First 843 /Length 2560 /Filter /FlateDecode >> stream xÚí[[“ÓF}÷¯èÇÝÚÂêû¥ŠJ3dd!ȲjÌ ×zÆÛdÉþú=§eÙòȾȄjJíV«/ç|ßùº¥–F )”ˆI(%TpBI¡½Ê ðã„õA¨$œÕBEáÚˆ`´ÐZDmzÚ‹$“Ðl*%Z¡§d…Ac½°èÖx-,†±Î kÑ)z¶cø(là°ÝÛÐs¨Ÿ’8d ¡Çq¥.àpÚF%¼ÂÐQ OÜA ú'õ£Ó= ×É¡„$€¨$ˆ$a4ðƒ_4BScÐ)  v0…qÚ tm¼Â9êi{õ£D9êÇä(š„Æ$ú4«@6‚šF?É€*l—`dšX‰”mêÁh°"¡a¤µ$Z±’V ]¤NÁ1JÂ.ƒ+D™8 o?:çlOÁwΑRVsô0ZEôJ%ð¡K€¨4,)YÁ^Ôw¯=ëÐë°´ÒÖ ¾§ *;øTØÙƒŒB§>Àz òð‘>44±fIB†ƒÂ(>QE é“£43¨1™dOÑAV²ŽC†Fÿ`€A(Q&Œ[E-™I"˜D¡¯$©]4HŠu –ä`ù¤ÙQŸ†*$^™¨Ïl+¨H25I[Â8È9ŠfghÉÚÙ:R³4ˆSÌÑ|!…Þýû½â—?nKQœ®Ê^q:¾™•7³©0ˆ±ç½ây9œ\–S\.xZ¾NƟĉ‚Jeú¢‡æ´)×úî»Üñ:÷ï‹âÌ@9¼Â,„Qgaø:DÈY4-Î'ãËåL¼ª‡g¢ø¥ü4u¯káÇ]¼²+À ” ìp¯¹ ¾8Ë9ˆHhqG r ¹µl¡Œ¡\Zp“é‹Z„ÞÞE¯õqÅr¨¹[¢ÐîË„cÓÚŦ_ër,Z©Îcá‘uS,:u}L`F×y¬¯uÀX.Xu‹“;Ä8&Þ5Žñ[Çì)Æ=qÚÖeeW8®kú«áÆfü4ü†]ÉÖ„“Ò_¿¹í³7ÛÞ©Ò“Ù]{ûIC*KBµw d<&ÐæƒÛÞ Û»ªJuúó“J—®Ê·¹Ø­¸¨ùç®ÓþÞ[Ãm©l¹[¹ÒƒáµE¡ÕQ Ùåv{ÛûºCï7nN»%›ž·¾Q:µé„¯Ý¦ýÎÃÈ#ƒîô>\×f°ÝÓ¹šïñîÊàÏ‘¾qÊ÷ÃEïN®¯ðëlÈçɤ&¥~Uê”é'`J}Ë—¶}ÈÔ꾟竫‡¤U?Í4El˳óÖÖ]2§©1ÀÁ­œï¾ík¥íG"~SM ÐQU B #`ETh~¸“—6§ùηã ´¸â\óÅSÎ%ü.Ä|8ç·:õ£]üJ*Lž>äóx>ò9ið<7ÌëCÈ¢1U]Êíæõíæy„É¢o–× xXŸ*`ü¬Êo^ä‰õ8Aðã?Œ— RM qÑW˜·™ßÂä/ úž?g£Ÿj-0oò£Bö^ÞÐçµ¼¬ÎE.7üåë&.ú±Á.´cZè¶#¹í¢lתûi±&Ü<Õqó§ñÃ/õµúÈöi´Ëx—öaìÔ·›s/Ö‘y¨UZ"4έx‘Ì›cêÅoÓ`v è«ßÊ]ü«d—È„EŸ;>ŸÜõb>œœ[sîúÅc Oh†¼ àCÕæ¢±§ÀGÿ‡åôr2¼'ÕVÀ³Á5®üóÕë×gþqúôéc%qa4¸š [Õ8É[ ÷Œ÷4_9JyoxÑ+L/¹Áàjžn•ë8¦Wp^»§xññl0^>¸¹•(AÁ‹Yyý6ë¿Î[Y£ÐɇÁ„Û +¾/~,΋«âjRf夣ÁõÛwƒbTN§ÅM1.nËÉpüîïƳ!zVne£ãsœ_œ?~zvž9ûµ”¡¢Š±¶ª#ÆÑmdüv•JÜ…ÊÓgÿúùñ“L%®÷ž¶s.|Б÷âF.k|3ÿüeKBÏ> stream xÚuTÓoÿ6-N‘ etÑ)´t‡ŽmÀˆ ¶ÑÝ) Ò J(!© "% ‚”4‚H£ H7ÿÏóüÏûžó¾gçlßûúôý¹®ï8Yõ•`(;ø]+( ËUt,¤€`°( pr#°.ð¿0€ÓŽÆ PH™ÿå ‚†C°8L‚Åùé¢@- °(PXBFXR Š€ÁÒÿrD¡e€ªO ¨ j¡p €SåæƒF88bqeþõäò…¥¥%~‡•\áh‚êB°ŽpW\E(Äh„‚"àXŸ¤à‘sÄbÝd„„¼¼¼@W …vçz!°Ž@C8Žö„À¿Þƒ¸ÂÿLp˜?¸ÊëAÃ8À…#1¸$ ŽâŠ4u€znpäg?À¿w ÿ;Ýßè_‰ÈßÁ(åêAú @{„ ¨wW„õÆ !HØ/Gˆ …‹‡xB.;œÃïÎ!À»J@nÀ¿ãa h„ \~(ô+ î–Õ0”«+‰Å~õ§Š@á¸k÷ú³Yg$Ê é÷÷`@Âì óp2A"Ü=àšª]pà?˜ KKHˆIáî@¸7ÔQèWzc7øo£ð/7A€ŸÊ h€°‡ã~~ˆ'ˆE{Àüþ·áŸ'€°0†€bvpðŸì8nÿçŒ[>á ´ã¸' ÿúüûÉG/ éâó÷ßû2·P6Ò5çÿ3ñ¿mÊÊ(o Ÿ (((-.–JJJþ™F‚øÛø?±šH{PúO·¸kúWÇž ÀóW¼À溇±äùÉ­Áâ`(îKøÿ›ê¿Cþo ÿ•åÿEòÿn讇‹Ëo3Ïoûÿa†¸"\|þ:àHëÅ @…“ò¿]ÍàD« ‡!<\ÿÛª‰…à„ „tÀ‘YPX ûƒ#0wÞp˜> uüC™?¸É/©¹ p}ñëÝ‚‹ƒÿˆÓÔ÷þÀàxùÛÇÉçŸuÕPì—ÎDÄ%€4âãè$‚Û·Ÿ0N0¸÷o&…@HÄÍ´G¡¿Ö* ‚`p3#0θ-8þ2þÆÁ@!WÒóøGE¨SÞobàÚù×ù·Ìápo805Ž‚Ê†;½ o<ªRbò\þHòåksL’Eg´8–k♟£Î•,õwå°ò›}éú“%‘ÃãþL|?޼­[sBæÒ4žbñÔ:•·ózw[à·a(F‡AÉô˜EÊ­G·ÈXYq?6?‹l]­X)0ø§![ÇC]ñC¤:ZÃn\ôô˜á…ÿ®CšþìnØjƒ©úb>Uh¾Ö4eµœ×jÈO¤tŸ“n0†ÈJîÆÍ›66ØuLažÇ±ß­€ÒǤyTeSOX‹WÝ^®†ë–’ˆ›|ôÀ“A´ã[9„˜(:ö‹ÃAÖõó€GÚÇxE†èk–ŸcÙϺû¾ûv·ï±ÊEñùÐÙ(Oæ½ñ>í›ßn$tç°lþxÄ’ Ý#)*®)LüZâyU#8K˜/‘ 5 ½|5Îú•жIb|Ьo %•j“ÌÚÂõ§…¡ÂsŸ†,Vu 8Œ3/™rC{fßnü²h¿ö•¡Ì€:cM Ðæ¬ƒ ¸%¯\‡!ëÚ^)4÷Þ§ÚøU2ËBß¡ëÂV‡²bK!n¶kµ÷¶ÜNKÝ•UTäÜ“1G3´Ü£æ>fQš'w¯êPc‹n±M$oZ«Έ›¿séÏ9kù‰÷A¬<´=¦Ð?Ck­‰÷¾‹W‡ËòVžé#cÊÊ#‰[ÑöÔ€·w>?}BtF¸¸È—¸°|áV®£†t*„.¹§xb›†¶¦\CÝ8Ì2Þek˜ *;n/¥ö3ž;ÖèÚ,súÝr n.ΰxÊ0Y ] ̦6ËyÛ×ýeGõYÉ„×+GÖ®©°’˜øÉ!ÆM÷K[`51€©Vû”Liñ9q ¤ißèhgšrª÷!ièH/‘®ªˆÄ0óéR!£O*ó­LnÄkT<%›ê"P–Ú•}g7«¯!ÓL@oíƒáº5äÜ`Y¤¤¾»G_ïôù8dici>2Ýð „¥²bû­ë6Wâ«W]6ߣ^ ÍÂBovC –ž‹s5Þ`;¿œx´~ :Qqp ~q89\mñó)G×dïLEîŽ*¼×”áYHw°eä].ͲTÇb«>¦xF†÷(ží™šÄG ö·^mÅG¹3gš¦b2×N)ã÷Úá$¼Éó#ma<×,¶‰½Ú›E­:LRºê›®²G¶ì…\O²ƒfÖx›YAó·ׯ†Í"ê|%‡ô¦+͵…rz)ÜüQC§Ä (à8))K ,×k#©U\…Ê$©‰Ü˜×̶yc¸ÔÝÂߓԮ“a/s5_s•I¯YaÔ™í%<§±—³$O9ɺ›BÏшdà>0 ¸é$mÝæå>ñôé,åÓ¡ƒ¥w¸Wró $s+^4Eu{‘í:¯a;‡ðûÜE±¯1O+"žW¤Ë´™{œ,½¬ZyÿÖ·ö.óLÝsîaSQÁon£ÃAÌ¡ Ÿ¯mÂC™Ò¢?ò,É {êßæq)dŽÝq£Ѥ»¥}ž§Ì=ã¥ÖÅõ ¢™º²G“8duú£tWÇiŒg퇉-¼"M¿mص‹gëUCº,¼ñ‰ V*g…Õ„#j=º‚R¡ó? CG*8‰79ºŠ Jéy ÕÂ^ºzVßOÿYL?'Üõæ5D-óÝĵjŒÀ«C¨dJ¤Ï¤>#õäaR&Ä|¾Ù Mï)Ïí¸¾ ò<ïƒ8çVw“ä1Ôó' øý©M£ßÛär¹•A2ÿ[k ߵ͇n£ŠÝ"6'b ª‚F¡¾ÙS~Tíf$×­dž‡±¦jåï»Ü ÂùÐ'ʦڄ¦¬Ù¤Æåm+.ao^PhPžÆE»¼ùæÃ#rõÓ›a­ÏðHXãw •¡9žä ËÓ¯:ÒŸî+R2X¸Ë? bðî º%”›º–Ÿ®÷Y*§²ô6 ›|ÖÂÉ^pY©‘½à+½`nê›\ºôÙ†g`fg¯÷Y™r7†„~P±Fv¹²›w 6{¨?©8‚ýòt ñ“H Á…‡2¯‘þÉ‘ÇX Dãó’>Ý›Ýü&Ö1OkÔ.a³{æ7â’[Ьjˆd+\æ”—EªAYOÓ)ʾ<’Чü>uð‘V—½"OŠ13pЬ]ÓòžúÈÁƒÎCE Ö>XñØgH^-ã$±ôÝñJÝœèl™ŠÝŠ»žf±Õîaâ5|#ùR·ÉPµÅÂØÛ”bÉÓ£÷Ùù¬dŸ,¬nk|”˜=s(?{a|Rx;`ix3ʧ?Ùež÷<9In!®® Os¾`æN¦j` ªÄV¬vÒ¶Á¿È—\fãð /@ñ™>˜81¸Ô8ìÊõÔòb)‡¤sà~ÂÐRíø+AÕYÉüã‘ÕSÚÜ7X¿?Ø n9ÖM²^­+B­‡?dj½h´WßwœXlŽNªÎ5ÎK £J$¢½øì[(Ö÷f \£%9«ðÀ Jò¸Ðìu7ÑLyA F4’©XerÒX­ëLÝ?ÆÿÌa÷KÔÓë<¼Z7¤åL”õ—bß*[Á`ø°œIóýpù°Üm2CÛ|ÜÞyb·œL[ý¸6åƒ_z4ÛºÕÚ~vŠ­#Àæ™&¼ ž‹ŠIÏr¾k*oãµÝ|Å–­|‘«=_Õ7?vÒ¥tüœ#åèà†w} )ƒ¨ûX(Ýq.1'Í•Ô6ŽVøÊk;õÒ_ïgIL„eiî,íöSíÕ=ļP­8¿ÔjŽ„¶™m´„gé¶fa…q|(Mèe{}OQF “¡wo„¾³âU™À1mbæû@‰\pøTÌh"¹Yž²o/‡Nt‰{€ºIlºÃ"²ç ðµîtmÿ‹šñ¦ÜVŸçéå§ÈÉ=tQ€ rE_ŽôÝ\æ×Ã…ðÙÞ]^}Ú›¾µvÙo+š_£—éo=OÙÇgú2ÑÙYºGg¬ìöi ‚ÂøJŠ3¨RïkëITpnêZÛuÍ­5Nw6 dÕÁ×®±zx¾Ä¤ù•RcYÒâ*¦,Ì»ZKøÕW‚ñ (UÓ8k_+ÝÅK~,Â6ƾUK“s­ù8\>³pâˆÔpuIŽÜk¤ñ©?›g7žá¹ñæ àâ2Úõ¢á ýÝ+éOë?ÖWj0f¿~H¥ªúùu§ÂÛŒ¢šgž, ‹„ôûVE“K_4F,†­}õ/#Aˆº°džºÔÓÐ'£I£Æ,IšjóÎ…/¢—§¢Õy•¨ŒÇ!7*m}ÒeìQ>&ü^d‡ÉW^\‹lEG‡Z4dŠÑR3ß§gGœœ{Z(ß2—߸ç”ëÙé|]&Âxq¦¯àÆ%]¬Œuÿ Ùbô´I˜he¾ߟ,r^+:QM³»B0çPO1 ám¡¤âü.´»²¬zã¹BÀ %ñÕšùÎ4¼û¡o®.Ö×뚸uö1 Vƒ¦‹"\ ¤\ ^]ˆHËœB~ø}ª. ÚóܲÐÈ«š¨IKËKeoÐ GÑ8›°›% B©Sh›Bõq Ÿ’|®~RÙÒ+Èî¶ÕÕ¿Q‘®UJ¤ZUc%}}Ê?y)f‘1=È-(fm«€?kŸ¿NvèDÊþ(¥ÁÅË/µDÚ U뛓Føε¯Ø%P@ÆÖvps‚j½ `„½Ck¢µ–Rº~Š <*¶âZl•er©u¥U5Z^ƒBìB6ê«7Ê£ÞR!wjÙÎò’“'ƒûý¥¥ÄLßµïè¼|S˜äNÎáq|Z·_Äðâ¬ï¢aF8 Vls8âóu E3¾XoÉ~~~`1³ 3ù 3q#Q&S)Ù^•öýk®c ¹6Qò=b#ø€Þ:”æI¨ŸbÆzXï|@§­_ÖM"@Ag[KaïUry8Ü"â{N$™_+§ž©ÚábdÒšÛ¾Š)Ý'ß|c›"€˜è%­í®{3¥›é›sfU÷Õ„î#µ¡>|ô{ÒߌP„×#ų´:÷xñÓH´$ã¥5»jù\Î:8òKâ/ ¯é±Îì?÷(8wÅ]•ua4S©'‰ÒePîtÓuYÁËòÑîÔcAœmÛª…žFwUè"cRÁ[«îA£•bË…èHçRXÁó»; gLbxÍ©¹2?I’äc(Ü©ºÈÚpÏg)èïKþQÑ$(ñR’6W}ÊU§ Éé°êÔã_‹tˆlï7Üä×’‘ÍØ&ÆñÁÔJç£C{j’E)…rTüœ±Gef“ã¶H–±­{§9$ÞNZnÅ)7I[ F'v…¯é ÜÀpz_wÞ¼$å3ú!Þ†™á½K$÷UÉýAª÷žnzW ÙÖŸ—Ó›Ý6k•ËûÓeïÆœ3(/T5¿»o6›/fËñ}îf [õfv¹r£²!ë'(}4tuJݽ/ïг ŒþŠÍhàëŽÇ|ýÒ€´›n•˜Îñ|ÁôÏ·GK œ¬Æn:‡8Ò–±¦±¯&á G»1]?ß‹y²Ýkʉ¿Cùp<Ñ|_O”di¬Á§úˆt¡hïH‚Ü—ãÄ74ÃÊÓ3PÜÈ®ÑxꙺëPILõ© JãIªéǽ‹àU¼cblç­Ã V~—ÉÃážÏ@JÈX*8}=Êàò.ïkÅjýøAÆ¢”³±Ê‹äà ÛÀç ŽÆ×y‡EhP4Šc-5fQ3³çìÉx±Ó¹R{|–ÉvjG«¢@€![y…_Ë,­Ÿ€sW„N»HCÍ–Ö©®™1¾Ö’R¢½ÿ-™šTÊ´ý|7'‰ÕÛ1Äy ª#³„,Ö é Õg•VÔ iÐ7ùùŽw¹Æ^ý|¤÷A:–ï+ñG4? ä¨vÓ•Òæl4F‡ËÍÂ&²kÛˆsû#æ/ò†V¢*Û„lŽçûü' 0›u¼A¨”€Ì¥<=þÏ^6uôÔS×<*Ëž×åäC,Ëzf7•”·î~¬éÇ`Y W•Héz¾5§HÊÍ‘]ÂæJ+Op¢i;7Ý™ØRô¶ƒFÞ˜j1ySš˜T×^è4\zuLÑ~ x¡ÙÌú€ÛÒÎøàøžþHà¤~TÇøûu‰+¶UÞõîñ¬Â#º3íØ±©„¶×K¸]óC¸áXb5Q¯ÎŒ8IÑ0˜N‹¶3·GÒî8Á­çÏz Òâ½üÂgé@¶€FN¦*I~å´D aøˆ°`24ÀçΩٲy†Ëå’Ûù”Çýì«93ô\-O0Åš˜èĶ ‡âh£ìBPãÛ$*‹å3oX{ïìKµâWéÝN·ðûäI/žÂQt}/à¡-t¶.ß_ÜYA#è ¶:s–ù÷ö4)jå‹l»Ê‚×3ø£).H#«¯ï û¾”ç%]i°3m{WóMS§ÃC}C¦-Ù”/&Ï¿ î ÈNÁó­ýѨ³}ç‚4ö‡WÊõ`ýÙ­õ+vJ»µE$x™×ÃÌ›ØP~Õ5¯ÞŸv‰é›ÍOîK›:µÍRXÍ«í1g¼&¯‚H½·8iüpøÚ‹›R4DuAZr?ýÚNnv‰æÝž7>g߇RLn+}£¶¿aVÛq£ï“Ÿ\Ôj7K9TðIÙ—œ9Y{*£¹:lc_!˶Œa+`¯ªpÞö~)÷æYíÌ„Þýé1¾YÏ7°šÍ•?>v®‡,tÿˆaàãKÞ P{p¬Œ§È!1nvðémø›…•Ÿè»²–Ë2†j”å·=aÂ/ó4ßêG’zû÷ä;c]_µ­×wvš|6y_ûÞ¤Cú¢òv4OÜRùñM{‚ý²¦Þ¨IÔ·Z2víYØUe·ø„¯k…`©›go„c.näºM@ÉdWæ2ò•]eéÄ'’uæGõþŒ1i¨ŽÙÅLç“=è U Zü[ûM<¦a;ÁµƒAÜŸõ_9¿;¬¡CpÚo­ÄHîñr;‰TNÖ:b[0ûÌ—Ví;REZ®NÅëí=û(ÞĪ]€Ö'.d(¼‚‰Ûªétɵ³¯~¦Š°Úÿ‹¹¾Z”Ÿ]ÊÀ[4ì}r÷¬ÅÊ­£üÕë;w$Œ]—ûÝì>¥ëj„æyGTùïh•;Õ?ü´¶ƒß’[±JL¶fUy\vÝc÷%s íH!ë*yâ²{འ'KŠm¡[=×ÀºÖnBùu «ù!ý~£Š»/Ô­”’õZ^ˆí^zs˜Åu—îF9,”*P´O\Ùå­O‹÷,Õg¡áã~Ñ@: d¯×±%}]Œ×=sD]â*ê%S6ŠÇݲc ÔõÐÁ¸yûKƒøP%3m…§:?¨ðâ…áz ¹¦šÓ~}® Ôò[AŽõÚÎØ-ꤺxÖSéü±Ô\²ÙAÔ‹‚žðœÙ’TùWq[\%Í5DUèK¹¹Íd"jš‡# MߦW¦UÇ|;ÆH#yMTƃܚ† ÌßÝÎrK>(?ËÙyê6I{LØ„îóÜžxÇpÎãþ&ž¹ Ba7Jüþ ŸOœ­Ž tù5ÞåýM/݈ÁC»Øöó1Š|òs#7llô<ÐÁŠ9ÊàÓ>S£É©Ç¢]±Ç›CR œI ð¾0\Kå«íH#º†/²²4vY<½èÛÃÛ“œéì¯+“ÕJìŒäæxP²šóa øÜ×–&õÄ“ü+Ý̧q4Ÿ9«-Z>´1-,Þà‘ÿØÆI¼ wÔwÏàY©6L?Ëî9‡Æ¾ç¶ÝÞ÷‘ÒnN<¢]žË”rK‡òÓõ¬)êÆ7ò—ÏŠ¯¡xŒ‹s¸`ÂMì‚ÕõË™ºþ•fLòB$ÅÌž÷×ß7póE$×%´Zß3çKgKæP·¯Á/Z‹š?¬ä«ø¬½ô endstream endobj 177 0 obj << /Length1 2870 /Length2 20669 /Length3 0 /Length 22291 /Filter /FlateDecode >> stream xÚŒ÷TÕ[÷ Ó%- ÂéîîîîÞÀ¦»»$¥[i¤»¤»¥Kº)ånÏ9ïÑóÿ¾1îŽ<3Ÿ9לký  UVc1s0I:Ø»2°02óÄÔÕY˜ÌÌlŒÌ̬HêV®¶ ÿÉ‘(4AÎ.Vö¼Xˆ9ƒ€®`™8Ðl¨à`u³°°X8yY¸x™™¬ÌÌ<ÿ3tpæˆÝ­Ì ŒY{ …˜ƒ£—³•…¥+8Ïÿ~P›ÒXxx¸èÿrˆØœ­Lö «%ÈœÑh Ps0µ¹zý'5¿¥««#/“‡‡#ÐÎ…ÑÁÙB†àaåj P¹€œÝAf€_%v JcD¢¨[Z¹ü­Ps0wõ:ƒ`­•)ÈÞìâfor€³ÔdäJŽ û¿åÿ6 üÓ #Ë¿áþñþÈÊþ/g ©©ƒ#ÐÞËÊÞ`ne (IÊ3ºzºÒ€öf¿ ¶.` ;ÐÊh6ø‹: )¢‚+ü§>Sg+GWF+Û_52ý n³„½™˜ƒÈÞÕé?q+g)¸ï^Lÿ®½ƒ‡½Ïÿ¹•½™ù¯2ÌÜ™4ì­œÜ@2âÿØ€EH¿e W3337+äyšZ2ýJ îåúKÉòK ®ÁÏÇÑÁ`.ägeÿ‡äãt\Ý@~>*þ‹XXfV¦®…•=Òïè`1Èüo >g+O€3xüXÌ¿þýû›xÂÌìm½~›ÿuÄLRbjêÚtÿ”ü¯RTÔÁàÃÀ``ecp°q8y8~ÿ¢ ´ú‡Åž2ö枿ɂ»ô?ÂîÿLõ?ëAøo,Eð܂ԿÇ\Ÿ™ƒÙüƒåÿó°ÿåòÿoÆEùóÿËHÒÍÖö/=õßÿ?z •­×?à¹usxìÿ¯©èïÅU™Y¹Ùý_­Œ+¼ "ö¶ÿ6ÒÊEÒÊd¦låjjù×lü-Öøµg¶Vö e«_7 €…™ùÿèÀËej¾=\À#ù— Þÿf”°7u0ûµd¬œ ³3Ð ‰ ‹©••©•³©›Ý¿rvÖ_rðZ¹Øün÷/c×ß¾àœ&¿ØÃhjãb t±üWÊÂÊþKìü‡\¯‰3Ðd 2wýCÌñøï]ý7*ËßbëìyØþ•ÿpé¦ÿ"0ES[ð\ÿ[û/‰Ýïüx&³!¸Ëf¶¶rßyL ßAÁ ÿ$åü¥wr_ÿFó¼-Ðî(à™ÿ޶0·rÿ#ì/µƒÛŸiÁ&¿“€õ¿ÞuП&àr~w›ÜDK/GKý`™ÕLÞúž›? ¸_¿‹à7Æö×ÞÿÖƒ»ûGEà žéw*p,{ð}ñ» àÔönv&¿nj‹?(Ÿ&‡ß¤Á1þðbaêø[ Îáþ>°ÿÏù³³ü#ýï郟&G3ø;àSοdV¿Ï˜ÜXG[·? C19ý.ür¹üu#þ›ý—ÐÁdfòÇ9óü#ü/°ñÇÄîÄïl`'Õ'“ã— Èý³ãq?ÀÿÒW÷Ö‹\Üï´à§ÉÕÒôÇP»çêáð‡8†Ûïmçüë[ËÅÔÁùÏ#ÏûLØã]õü‚³zýÁÇçý›38’7Èùoÿy4LÝœÁççú×»~Qþ‡ÿúLËÎn¨ð)4ÕÙÁÎw")#½èk;Ô·Â+$?|NZà#Ú’UÚŸ|ŸUgöÚ‘–¦q§ ODêÞ 1¨ ïûþpòÕ ²n…ì’¥ÈwrãFUþðúÁ£_ʳ~ |u<|aOe¿šSîÕsù†w±úA%s&9óxdp® oh1/=Ñænïf1ó¦^HdéüNß±ùèn²Æ}Ÿ÷^ÿ¤ÎêÒOޝ‹÷ús|†ÒGô0Uwѧ´8vC`1—™†bc|€Äw¬‹ôŒWO^—ÙÖy™GjœÜ¯½ž)H»1{OÍØ‘¶ÎñuÎÜÃCRêƒRKq¿áþpâ}¤3™‚{<¼¢—ÏþÖ2Ì­ÎÉ­ÜÉYÝ”ž÷¨žù6"Ò6öZ³èºø'?,8¢›}înßBë¬2òZŸ>ë©SÇYÏ}OµÎÁ ‰s7T$øÂ” 4ô×…™M\#‰·µ¯Ùõ«yÚM õ{hôFðW$5V®ö²ŸŒë¦sË=y{x5zÙ¾Ÿ*–á0Ál&±6M<ÓÅþ…šMŸÌ•W¸0R.WËûðVXvÕ¬Jx¦]òrB!âà¾Ç¨¼àÉ ã­]Ýã‰@ó¡àI4ÌœnN0 ¥9M‹(Zñ+ZšC‡ie‡_·n°ð°° b ‡Pb¢Hol’2ÿÌ«^öÃùû;”Ø]¸T4ƒc¦êÏ–¾SÓŒ%ª"0_Gjäæ í²mï ×(µÖqcÖ‡|ˆ›?\þ°“ì'X¿¨x“ÓÖE¸2Ÿ1– )ç/ƒ^Ä%Œ£Î%²¦ð¤¤ŒÍÈ·ž+=Jg®]›ËçW—ô‹µo= £}+±èVAÒñ‘c¨Ýq5AT¦£x« Z €ó\–Ïå¨ÒùŽÙR:cnžýÒMïÅC§³/53w/‡µCÏuúËÈhêÊÇØ†l!Ë›Œè“ì­Ÿ´Ëo È‘Ì‹Œ£ÉÊaÈaYQ¼AèdÁùWe4qe¾3ƒe'±æ¸pß+^‹7º> Ï™¥õ–ä |ÊÊæ˜øÖ@GØTxnÍÕCqb%ü’†³ýzƒr&rL bÚ)’@cmZò¨ö>¡•彫ÄTð—æõÂ(3qYðû>ÖIª ¥2ä¤ä\÷;á„Âf“>ÅBѲXxܰv°3ççµ°u Wlë×py¯½gXˆŽh¢š73.¿ÅHxëPµ —ßsDJšØ[fÝ[0Å:Lð`A~÷ü0~Èh’'c‘ÝãÕRÇ7¾‹b¾PP¶v“¼w|UüTjnqJÑåXðÄouE¢DLMåS?_7†êQñSm_ ”EÅ-þr56C¸]Ï:5Ù½ïG|/Y(:_ê0û®-ñìµ!LHOÚ¹nqÜ«“媔„ÊpTH%ŸÉô¨>àV–ÖpÐÓÃÇzv¡²ÈÜ0]¾æâ¨÷úèǤ,S’¡Ôxr¼Œb§Vr<º<¥^»oK<ϱ{qGîÅç/·=GgöÓßä–˜mÛrP™Œ™¬;ѧJß1”’k¹¶íïuû¥®aáÜ&ˆ›‡jÞC}¾é±x:š3c‚†b„w8ó§íïLÅÜjûŒ6ÚÂr|kDb9¯ós@ ”ƒ8¥N½ð!˜vQØyc,À@ÎmóÃG÷Å¼ÎÆ„À,5ü²RBý´ÂÒåž§©ý¼$b@ª ó-ĆCàx2K§àÔŠxÙã[ø˜/n)^N¸»XuŒ2È{G¦öë»#cÉmYx%ÒރC}%i¸?Šd»Ó¥M:/¿G¨ªD ñÆ2Þ'õýP ¤­š0;Ðx•OÃè*Cd锸ø3’˜–:ßé<°­6°Zð T{Hq€md8~“ ­?GɵIÍ÷Ý%‡33ô·VÇÁ¥ŸOKÜð)ZéDNâòq>kgÆuXÉÃfï }CQ¤d_¼™š³¥©>ë’‡F-Cd,)Lr¿+ÜŒ‹ÔEŒƒ,DàçÚð©–wüŠÑw¯ICñsëÐft-$ô4CÝ¡ðYÌÞ]°Y÷Åy¸Æ§Ý·GC÷…G¢Ù»ààëgùp¡úÀG¨dÜg^b¹¾ªÛÇ­Šqí÷¡·0äK¼¸&#<Ž; ’†f™¢“Ä ²ªÔœz ê´gì¤Ùïf¼t Œ©PC¿ªD¨>Ux]¡,òvÐ<1PÌœ(– FtŸöS»„2Iõs¿ÄÐÉ+ƒRVùÀãð~Nä+!KnÊql&Q ºyÈ]j2)nsdã¥+z³ÿ@ ´63¤w'Ë9'9v³ßSÿ‹õžÕ6çÁòÏìµ Èš†zÀA™ü½ûdº›Ê¡C+ïúµÀ•ß›F‰†±RêµÑ± fÆä®ê8–¯4¯ÌžpbBÞ~•›àkT6ÀÅìi¼jÅQ…ìú™ò|˜Ò&MÿžlX(+'9ènÇD4ojrøy‘ÛwmUj*÷ëú…>_›42’ýàœ)käFµ'‰ö$V> ©ï&öFkê:Žë[â¾M!ŠÖ™û‹Ðhµ.žwfh"Ì0ºaI“ö(~Š mÍð†ÚªÊé~ëíV˜ l‚3€håÙ`:¸n켊IéÜ}@„‚*sz ‡¿Òj$ˆ„¢v¬f{·§C~fLSØ[y;Ó·È sÞ•‚aðêAÓ`ZR¦JÝÆó2ËÚÂ$W:Ù ‘š©gû¢"›ˆ1v*¢ÐÑ©«üF'à“ á‘·'ýŠaÒ„©sÖ6§CUsxcëmÁð×O®ÒÉêkb?¦)J|ÓNÛAÜßɱ¼ZšE#äQ}Ì»›>‘S$ühoC(¾ÓÆ b>–?ºš¹|ÀɃTô6mjÏ,y æòŸXêmÉŽYcÞÌ™UaBFxSu óîMµDÊ3Ùñè~@s¸mÈ«_?V&KGbCr—êl5ãØ·¼žžòy®eBëxxDÈu}ùâ§ü|úÞµûC‰¬g} ÷âð¬*Ñê#®¾Ï¨±Ûú‹v$!IcÉ ÅQ+[OdüsW¯þ¼³}p¸¢,IãñϘ©ëŒù’•6Ÿê^ÕÃ^V²îJë$¨ÚXÙ§k€×ÌO»”)Ìk¦ÅД?¤§~ëÙ„/—½ÒѼËân8íféùgöVVžGèµBðÐk²,“’q•T¢‹Ï­æ¦ÍÓ³yÎ Õ¯ø-lýß]¤%rèTËM ©í]œ˜! GÁsÌK»l?Ý®a3]o·ÅŒÛh­»í[ì¼ÿQ³pŽîGÅn›2ý~Oø{u—‘’ÌF+~Ö“O‚!Œ·ƒ™óž'Š9aAç8É#&—ìÆÌÂÕCèâl÷}ƒZNÙU¡·~ë‰IcѬ©² ‚ÿ`ÄsAmoßCñ„7áŽÌl%i(ŠzHKŒj9ù,}qpé)Sþ¡(Dáév¥D:wO}ÆÐ³¢‡Æ}ö){ÚÒJ?}ö¦Uq„ŽñF+-hÉ@‡îÓBb!msŽa·÷ZÿW¯ }±iáð4á„yâmcvn9ᓜO~JGøŒê&ºó­þ™FlÑšÎñóáÙUÈâßàÖM7_n¡¢¢”9„˦ÅiõPva·újéR=ž––GÞ˜ä2Sêû¸?ê¤L¼Æ¯^«ÄÍåuÁ¥€w'¦%Sà‡#N÷:ZܶæQ”чMäxg9¿ŽÆ Ÿý}WžØd»‡¾ÚBÉžŠ{äy¸¼²Š—@b.œŠïÍÏ0@ÄNxöhþ7 î Àö€¨töÓ×w²‚I“@õ/©d*„ï='­³°“ç-µYîëù¨nK§a ‹Ðø§¨/¾<öpHu¿ q£%' _’!š¥ÑÙV¨“ù[qÖ¹;k*­â|G€L0‡K=È .· Ù°`Êðl/¨Qœ9œÕ`º¶;ÇR ªÀzëˆä§#/§ü} ’þóì½Hú…ªò8 ¼²ÿ½–:ä^raÊæ‰q¤ë¤Rd’ò`¦íxüº­>³ú« bŠaÑ•½|Å|ä:!Xæ÷iŽø/g?å/Þk7Ô¢¬|ý.þ¨·' Âtî`_LžÆÿnö¹<­çý{5V=Ôq[6»_Ü\•®ÙT@Ù êÅ¥bU;‘ûÍÏ̹i;»˜ÀÌU>‰Êjùã~ƒlißJµäÞšÚˆfÀÛÛá.ø®’ˇ±7 %{5Ýíƒh嶨·u„ß3vÃ÷¥×¡jœ¨8ߣ÷/A…ç=]¤l¢:êèé0p+pµ~8êêÀôÉÈàȼŠ)(sì¬9‹¼âö¹Ÿ—ÚÅFt®ïY XiDP}6J.vLCkò+J½•iUÆÊÒÔU÷ÌhIlÏp—âM^[D”aAytº ”@ã1oà±uÙõ @3n¨\ÝÔ»™ßl@º¢’AT„ùо-4òÚɺü*ƒi4î$s¶Ž.·©@shæÍ´ó‡íö2NJéé÷b< vΰ¾}\Îu˜ß¤¾SðF\Ë:ÿlâÿJ]a!eØÛßPï_í©|g(·ýu·gSçQ'L|,™ì¡å=9–y3qÚJæ†Fk’öØ®ÃaäÛs6Õ6zÈ—ëÖ?ÏóGòsÒÜh2 Ë iü"ý½Õ‚%¢+þ›¤0žàv7+Ó}—‰]Ù@$S]ߦ,Xr±a½b«èEÐeÈ«/d÷Ou›ŸùØ|E½%·tØï´à—Ôˆ¤GÓe·Jrhü_°(²KLôº0”„ú®ø°óT="6Z‡$*9> ‘åjíùòÍWÉpž¿ƒz¯ E¥o}(÷ýÆÅ5ßGE„ƃ@öØ^{3ÛŠÍ-V“ J=ˉ#ÑÄ—Øÿä1‰ÿˆõ©› ßDÄ/,(/ƒ H^{N‰óà‰ Ê˜—dj¡«!±”¸ ûŠÛ"V’üVŠ>åe\ÁØËOê¸8wTˆÆ4i öë·ÔÌ®-¹W¤Ü¢£q¶#ŒkÈP·ÄS8ón‘îHrÍ¡jB̺üåo:® s$ ¶.Þ£ðkGšAr(†þC›Ítˆ¤¨Ÿ7ùí¤ZÝßyY0ó–4³ŸéW‚&?É4!«¹`ŒˆÊ¨7ÇÎϹ_c.ƒ HUÛmÜmÉ}+­îO™/;‘T¤Úゃ̂¦~?üªÕ‚ºÅpÌ;=£ ÝF£Sëp¢ª?ßsV—R)r{ )DRÀÓIðºÇ"E’…B·Ì–_”l%‹=qø¦tãŒëíïk'Aï®/.ÊÈL\6­œéû tíGßô•f±í÷Æ‚¦Ç©‹j-—žŠ±;䧪ߛ_ò®}z„­Î£‚Þ–å5µ.g+6gERLjäeKàSBu'ãÀ®âèš‹&Íâ û`=>*ŒµG7ÝQúÉïÛ»å౯æiêoÒ1~0 39.%w½«H`9flòYší1y®öÙ­àçÏr?½_kÙÀ÷^¸‰à|5q•:<ýq‚gÜî+^cY¶I°kSÆh:¹×ÑtùBæ)À@+¯wáËœàÇõfè\ŒÛåBѤf-Ú7ºb#ƒYÑJ¹ÇjAˆ'ÌõGóÀxܶàÉ…î6¸=µÐZŽÉ”{?®¨`„¹Aœe†ž,Zܱªx–áÖp‘èô Ýú]ø*|g¥Dj)„Wö阜;$Xñx¬v86L0Ä(ÞבSyÈ÷¢ @îÑcÖY“¥Ah¹×{)Lš˜»gµ~'¢¤Ÿ—†¯ AŸiêÒ 6;ëǦL.Sîöli ”ÁÄËÌx9)Œ· FKË?ôæ Öód’? .ÀÌ4ÈØºWy)ß,?›ÅÎêC»b´yÏxìòÍXB˜ñ¤Vi#«qŸbúä$¢Îçè|’e·Ávi½¤"w¦ËrÍü±ÏEJ³aG#¯5®2‡²#Ï•LSYoqؾø-q"±‰Œ1²»ãʼn.‘õƒv ­Waô.˜—‹¨úÖšÀ.+¹œ´‘ª¦ ‹­Õ«Ÿ_Ïp¾[s•bŸ°n˜áÒ6›g˜¦àÓÇ#‘<ÐŒ5C5Î=³.ºãÊ¿¢õö¤^Ëe‘-ɯ=hßß`JQäÇŒÿEÜð“d{·ÍËÌÌ8›Ó@$Å,³è«‹Ðã5Fãž¿¸Š$~s~k®Y²fG)ø%ƒ‰Q‡ôÚ"†÷ö“Ý?âéeµMËÚ_Ãa> UK=*Ê+Òê…P›#£"<”E*z5ÝC§qJÚºL%‘ÆW ®%ZÜ)‡†2qŸÁ¼õÙò¾Jí¤ʹ—Ûâg†/ßI}æ²:KqöXS&HWí4°âÈÙXúâg¹é:+VŒùM§õñ§J¹/•ѬµÌ\Ão’Eø\{í*ˆ±” sLÊ[Ô¬¦AÑî|êT¾ß›º:/Ýù9ÂÅÑ•¹Cñ#~TS¦­À¿o­N®(dM>Òªá‡äzK‘™M?(ö±MÁw¾íqYi½rX;r 6çsP@ÂQŽÔÀãÚšoÜw6'ƒåêÇ Ì"èAZLÈÝe÷›ïV©6ˈïçs½×#ÂÎÔ7Þ/ïìls¼4&¼Nþñémžæ8oa ˆ³‰p°Ìn½`W•6•ÀÑTñÄ­–Êû{ÖŒÖ|¨]Ýþ5LµÖŸ^Ç’´ =´|ÕN9ž,T ¹ØžMóçFz*ÎM>H²lÙ¤—ÙIÚLŠ…Hœ–ÜE&1’ùÚ3WtÓÌÏT„5ª¡\Ù ‹ e÷ûÎR޽Wqʵ ^†ú+æë´wÚ—û"ߗª&aS÷±¤Ö¿«é<וñ^`Ç‘[ÆâÝ8¦|¨ Dž?•Qe¨¾´`ýTi- sÚQøú‰»¾´ÌR«i×€‰K=Ã¥¶óÌδBìÁ‰¢Ý2p:Ð=X nÝ…žnß¼$ž 7! ]dúxïÁË\4‘—Læ3“ÍëiF“¹éV©ŸxŸæ›[±¹¸Æw²°¼ìâÊ:â\#®ˆ5ã&d~Æ›•줽ºír27Oá8=‡/ÏõS S7-(òsÁ‚=‰ù®ÈA¯'3uVnIôy«uSMÇØÈ¼¹Ëm d8䙉èO]­cZGíkà8§B‘×Ú®-Ý|<îÒ›ßø»&Eu’š‰,%µE Åöâ‘·Æ…°d­[HuoûygZî…¸…Â(n&Ÿ_ï2}pŸÚ ñ×ÎOÛ¶á€ÎÆ«F·ŠêÞytY“£GT2Z]]búê&)æ öYÑtB^•š$xí +?ÿpVöñª#d­ ­Ú}=X&ëÝïüý<ÖÿÓ\ /òöDÓ“”µ‚%äÚ;È•7?x8ã¾!vâëœÌôŽ`er…nž8v“øþ¼þ¾\Penø8qwe¬w–ËAºùF\”!©Ï»rÊÚHx‡J¤½O8¯ ÷òýÃã=ûÈqYy[„( §Î«6ŽÃ.§ÖEùúæòC&ÏS~»j³¹þëÜŽ]üà±>ùT8õ÷±ñe™··¬Û°CW.édŸçÆÚa^÷¶ÃIy Eß²J2¯¤Í—ðêgëT<›gÛÙ¥Ajî·?ͬœ­ß€Ô¬«aåZ±%XNÎ'ô£õzÂÐŽm$Þ¥¾ÏØÕXrÅü*_'çvW;­Uu#•_ßEªƒÿìpnËåŽ/&†BeÊøyñÓA^‡SaÒ;7änx Nˆ«ž©!®8N¤¾¼B\›)І™Ñ¹³˜åÔ”ƒ>.»Èþ»ö¯òJ ^D@³Pâ±ÉRß~*c˜$šˆÖ‘£dÃUkµ\ŠiðJ|¨Ñ²-[”2Óú‘¾Um™I¶ÂH{O…9c¥Fú°Â;Éh¶šx!%Ô93Ygô@‚ò©ÁÆêÌ£ è¢8Ù‰¤ Qyfç ¹¤½ŸX¶;]üh r2œO”:½ YÈšEÁUâFo2ëÂ^Êïg¼ášÕº®œˆ\ƒ[ÀzãàžÒÄ– L—sîìQÛ*ê_}Û0Âs"AÁ'L¦‡ð•‚Ÿæ¨Ú £òœ;×HÆì¼7Ég©’†eÕh·›áGB,Ú´pÈ“§¸æ÷"»Ê×t¬U4¦ÂÇæ¡Q S˜(6#A÷¥ìt+V‘´XI¹ÜO-*çó£åõ˜È¡ ƒ‡ :=Iì‰Oœü~’ÓÓJé bÒYÖäâG’<˜è|nb­›ÌEchØiYÒpñ|³þŨ? cóK ï4'#´s•ì#ÄR¢×ô&±->èªU\8L ùõ&Ëàz~Dv+‰ñÝ·QI³å¶҃C }تŒ¤G:p•Tx‘¬–Û\ùH}˜»è T@~jû6ê3\7ªÑ•óm¹v‹.DÖòl´<€P—võ?‡E‡MÔÃÛI ½ðëýÕ¸R›µ-!ÄΫxOEÏDɳYvÓ—ßÃÂŒ¾óÉG¹Ö=|«W9na5D­"O$Äÿ@y•b°¶ì»šoíÑRûÙìÔŠ‚ •Ÿr¬t­¡±ßQÒu1—![€ÑÖ…ÄÖ”‡ˆ{þÝ´~jwÍDÞç]Sîu»ŠðÝ\.tóiÔË‹d Ý„«d¡ñXn²¦tA3ì™2éÄœ2ö*¤Oq¦OSF Ùrƒ'™vøE=}!~D!)‚h©!ý‚¯‹‰²ù–Ù¬Aêz"C)çÔÃÛýúK™äâÔú_tHœéra½ì÷¾:¯J^Mÿúv§ aí³[e-[,Yï ŸÎWíÕsôè‰~q•ð૽º3F;¤1£$`ŸÎÊÇõÓ‘ÝähÁ¡G‡GËm‡¯úa¨'òm*íå {^bÛÞ- ¸DK^îïRO÷O6ð¹X…i`‹Pà >s“¹o´ Æ8'Ê\wµ%Òaë¨w `š}X¸ÿÂ(¹µh¡9ös­b«`¿ZfÏXv^’YöÌSXqW…À¥ÎÈ>k@Æ’2¹ ¾Øéxj¨¦® „ÔÇU]¤©tŽ~# èéÑKðíh~†Q{Ãém:"'Õ€=ùƀà ÆqY–óÃcGæ4 v7äèÖ­u¤wþ#="!VŠ’]Í ¾IÓüBK–bºK —‹!ɲ[½¨à,¦wÃbx9ߌ=]ÊKéÔM2n)ëÙ¤µ¨Û<£N­9AIh¸‰\ÅUsõ”—òEÔ–¥þIû­Áú~‚Ÿý9ÍÛáÛäR±Ã3UÖ3YÏç%~Çì¡l?‡¿Œ>@.uþ¸Éã^W|HîI!yß=xùt¥`Ì?ýÔ‘ÊÚŸð{(ÿ¶Ùš hBõÀv× ´*Qqö0¿(ÄH~L¦¹Èê·Æ Hè¿xåcõÞ[ÌÁXTdk.ª†¸a›Âwø­$zJù‹7Ðë2uHést®µÏªã4ô¹Igœ6ËóõϪ&v»˜ÅÖu…)f0T0¢ëÂŽ|ŽnDÕ¶U %óG¬æ+ôÚ½g¹½LA솹‡oã—ðæ­Ñb™s¢YŸ•röÔAȾ«÷©×À S€øÔÇ1ûÕr4ÐZI4C·vòú¼v›úGa´¯íy¥5&\Ôà‚¸•‰x»Æ—›K^¤\̰YÕâkØçú^ÇrM’·Œ ðcÆÍ+l¾$«Æfß]kq'›‡"y_DÊL:ãˆ6¤5€ÊŠîýç7jÔý“,—žK¹¤G'¢^½WÐs†´éñ”Jîí–¼ƒÙº»ØM›9ÍŒ‚-E¶~ÊÀüJÔ¼þ(_~éN»ƒ(‡X\àŽ‹9’”'eop|TGR%€füF¢ùi‹ApÏFN?Ô€Í~ÔôqFG?›5[ÖBAüW6’X5äÕ~ÕpUo™\°«¢ñ@S婨ÎlŽ¥ûÎҚܨ0±íê%Á+Häºçq^}´:1¯Raìæò¥1 ½Ú Ú¹Õ9 nûo?±k^Ûw1ŽíèˆìhÂ;ž†QÆ0àúnýÞ¦ÏjËÚ™n©ý4 –Õ.PÙ ÈË¬Š¾:p¹fSÏ‘‘²´ÿsELG•¬%… ÎB ƒ›C½mw*€ó†ÂMÝî~E 3Y„‹„>Ùèð»Ëû™Ó:ôk[ÿc6ØÄ!_³j¦Ê0—<Â,¡!iÚvìwoÜq—*¾0va;|1æíî:0U@r`C6«•–ÖˆQñpS, Å̶ ð‡Ï›AÏwsÑŠÓbšTÅ5åm3º|ðrGçЈ“w¤uÃåJ…i¥‹ú"Ýé¿ó6|’C¯FåF}QøìઠauÅ:k´»\T=G-:tQY/®;«@b‡az9îxRP3²’8ï#ô ³Mâ‘¢Æúd[zÖiò} ?Â[=j ŽEwm´½®­’gÖJªz/ˆe`;Dl& 5´Ãúõ¨ì×*I³ýkÿ#x5Yç†ós¡*¨Ó´[§Lëº~Þ7’cߨ–¤ÌšÛ$ýµlE_zûËäÚ&„V>%•e“äº#Ï~Üíë 9KSr¦‡5“×Eº£& ÂÚHH”g„P¿µÍJ&7¯@ɉL÷=™#6ü[jOj™0³õLL £šÜZT(à·Õ³½{zp›€ßº‚ mXjæÎ•p—`Ò‘ -óþÓ¬Ö°ÙOçÉ•Ïu\ëÁ:CG…ijbÜÝ8Ü!WºpåVÇÐri²ÑÖ%WÊÏWµDvœäy_‰W…("‰Õ L¡Éø^‹‡šîüIv%ãàh+å%yUH„’×ÈdÜÏæj`%LŹôÝæøéûVùÛfG¢ö{ä;‘Ž‹¦wf®2¶¥r:%9ä©óNa§Rî¿ÍVõ%*®mr2³`®cP¸\P%ºº¢û£ŸZDžznÒmõñ\ð>tûò£Ô,‡Å¢Õ…›<ßÅÊ7ýXès‹Hv7•Av0z!Ê[ãBg<Ÿ¾.„”ì{ÈóS™üP\„ÐYêi®“œ,.ðúÂÅ(— ”J¾—ìèx£Â«¨)(Š[uAmªÆVLG*ü‘IñÀtÊpÀ©B¦,¡%ægKŒÝžÒd·¶ÃþG2ç'=²ñ—ð¹²Õ[|ËOÂÛûãuø‹©ã™lÜ<ÑüèØ®¼#;§»U¸—a* èE}ü‚ÊB(q³Dú‚­HH¤ZQ{~ðþ[q‹,²E¿et„šæ!+–/’;©|\?ÐŽöxÍ`Ë“"û%é 3oWÒÊzºZ`›¾Ä<`Gî«Ä¨õ5Û¥bÓØŽ#º˜@‰ÌQ;CiA jâLÑM ÏÈÞ4¨§üD›eHt±¢÷‰qÞå°S4åú¶ä;‹|^ýñÕWŸr®fÑ ¡ Ó³dZv›q 2L¯ç1§‹·ÐTq°‚³¨uu·G ùƩՖQ ÙhЂ>ä%ý˜ÁsÔe…¶Æ8¨ÕLúd}”³zdóLúkº”Y³;f’kÝ)«³¨­#K­ʘ‚IÒ›d•…ÏÊD:˜•1–Å3Xîrµ„rú.oð¦ØÚï6åÏ–°Å»un`€m¾¯i9±6vÉÎ[…ØN-‚Cù:¤!"6Óµq«äOåµ›6mó½Gžß¬FÒ Ö°* äž÷xeTŒj¿ XÜê‘iT÷f<½vM&4ŠoêtÐÆ Ë–Èû* VRX›´ÏMûÇá[œ@S6éq¢Þe—ålÂ÷š ÚwšìÉ9¾@ ì7êo,¡-±W¿¡Œ"V¤».£ és*$"[ž6¸45¯$Ø)C’8ÙÐé £f°ÓB!"H]b6‹¥ÝÄ"Î…-ªôo¿¢ðI.µá6n÷î| -à>%ŠºM*´¥Ä¹Ø^»ˆt³SémY_Ï (¤I“Ë,%§Ñ°«k.%•²ç¤4­•Ç£/G 1N]vúö¸z‚S–odžFðÆ»@ÌE«GžŽ^Ǽw^4±ëR'§XÞËCîDÃÍ_ÜÒE¸mª¢’21Êࣆ¬ØòPkgš ™3ÓÓфʒ;k3åðîþ:+S|²0Qw8²@ŽLJ‚«Ó¤ÂÔÙ0Éc¾IcïÕPÒ®¾¢××^­Á*‘ žðî ®swM¿eu;“’ÕÓ ¹¯JÚ‚BP¶fèï«QHï^¶t]1CzSH5ªFÓ¶î¶Ç‚€º­ãÇ ¤>`KФ4J(-Uþ-/Rz`¶Ù}o×*k­„ã/¥ý¥yöHP‰µûDÄü”eå‡ü¥»ûò©q‰Ý!˜1 V#ÌH±f|1%Õ&=«HçSJ®®Ý-2ZÃ:m8TûWYµ kBÚöXß?˜Qß²“V+²º6Í—ÞézÐ],ž/pDÇr`C¢;œ­è’/…,ÜûŠhÛ¥ˆ–Ñ‘Âã’7Œø´wC¾l'nw„é"„O5ûj‹Ôžc¯[¸ØCŽüZ’dù΂,îÜh†r¸LáýžR‹öY} ²ã4µrèt¡Ñ:îq]âúøàMÕ¡*ŽŠÿ¶²„dSUÆçD…12Ò»¥þLB5´Ÿ–Ê¿$Ü×àHvWFº=)©òÂkMÜ€:Ps¥Ÿ„ .k_ú+ì(~΋ëàUk|½Æ¾ ÈD÷ÇuízÌ_½ƒ®­¯º ŒªàÚÞCq7—;ö¹š¼–w zpÓâz©7áK;™@É­nœ¡"ã{tdŠ¿?•ñ”3Ã&Âq¶»è‡ÝIµ$!î(̘µ­MÒT'|(rN6.ï¥Zl(³rýìà‚]êAô85Ó6wà¿‹¥D·7­-üXÕøS£o9æÊ"¹‘!1²Â¿ª´pa€† W8¤J@° ­áž¹dûšÐíé’è ë•„OºÚ·wÛ Ï®&éK˜‘ ŽQ³)Ð Ë6¾“|âÁtøñ"kñ¯kÔ²5ø <Ñ”€Ó·îªòo]IêñîÍL¾¶õ.âŒl~•âʦ¿«ÎŒ'ÇCˆ6ÙhÚQ,"|ÝÒøJ¯¯¾d`[¬:ÇöÊ8 D†k?"L²R[lϯæ˜ïŸpÿ€GV ÿˆ»Í/c—±í-L/a.ýtÜO*ÉSÊ!ƒc/ɤ=A sdÆ]Óµ²ávºEátz«xJ˜¡î]ôÑ4‘È4Öý@nͼ3¹¾U‹è*Ÿò* ï2óHöë‹ô‰šº7Ûj÷OñÎ"¼Ä³{?6õœ”RN)›íƒ¤úà¡ué‚vö½³†BÒ’déÛ›¤²4qÙÔý5èe¯óÄV¯'¿ûUèæ™Ç®änN®©—`é áÃ]ìØ‡…y<`ß–˜C¤·ˆøî| QX–úf,2pì% Ëea¶iC:ÿ•. «>¨P6Ý„PÐ1}ÿ5¯–;~"£¬*䕼ßÊkôL¦BV7N¾¸t_ÉÄò9(Gƒ2Bׯ~#ôDÔMÍk-ãÛ·°6iêj(ïá²bn®¿t}ý¬]<Ä2ÃüÔS¬ Œ.¦2!„£ àø¢ßç^iÏ65Ò”ë/û$ñó ûRü­cz‰¾“×5"lÑJC¿Ë¸&µ²6QZR(¯oᦥ“Ö„Ç'Ç}°“¿Wî3¼ÊQáº\£É˜ âÄ\Ãê÷/ŽûWåµ¼ÞAeîRŸ'ìGBIav°Ï4‘·ë/1ÇÙ6b¶:Nà¯!aÀElÚð¥l¾%Ðà³S¿{vil½y.òå6?[pläpBbýá·J}"ƒêt]NÞ“RuMγ¸cU]èÞ¾›ÙFÓî¿×êmÓu§?§%Ñ5•ÕH!Æ<$¡‰e5u‚³¨V¶ô¶ìŸ)[í«SW†P¢ÈÙ"G¬lÃ]šŸ¯™ ƒ8OXŒvpûÁNÖjF°øJ€7¹›;=:PûáQÖßfÔA˜)ŠïýuÐòÊMï6Žá¼¬j©_ìOW¹ÓYEä3~ÕI…âçä®¶›&Rˆ„GO ÝK&!•…ƒ…¼Ê/ý)®ý&Jį¶5N §ÝÌ·& ~<ÜîòÇx!rÓ<&}'i}~§íçÅ>ÛÍ71Ôb+…(õ£©'K’j©æ6YÏtâGသ¹|d¢nýÙ‹ •Ï9^°‚ Ì¾’†!9W‹ê¥ å¾ð‡7q¡‚4é+X‰Ÿé¸™‘¯s¶)%n ²CXlŽdÍìºÑáíLqEH—޽Ô1éÛ.íÇ_®ÖÒ®±²ŠS`N¸oS<Á´„.¿Ù~Ô<–'Š%s“-ߨg'a¹tÐùÒ¥ˆöÃCùÑA¨ 5kîÕÆSšGlÔd6Wõýè÷A£÷‡=‡bw^HLÃÔ âˆc•‡AiÐO[ ‹h }ÚñIS[æî%†æ¶ü”j蔲i˜l¯'ÐÏ‘Ñc‚`žò[3sBz"0P±» ³êg"H\móžMöòO£ú€¥Â‹áèHhöúUô´¨žDœÞÓ›’ÊSb5ƒÀ!tñ¨O¶©Á± U+¸UC ¤imýv »ðDRd‚J%£Fnv?¨=.ÜÇð‡¹ï¼„Ø{"à$Q‡ö®ª2Hw³ŸÙsý{)ö“sG;·æªÃëèÛguŠük#b—HpêºìCyK# ½ö¸ fÐ?öEïÌ%žMÙ8+wm9é2åR{ãWr÷2­µëU#xüƱ¦ÛëOóÕ¦WΫ㶕¸‡ã¸aã>kΉÝL@#e)—m›|ô°ßñÉ“¯ÊSQ%/þT’ç}°giK¾‹Uøp¼&­ChÌB¿·òÔÅó¾öÁŸ*ZªgÑ¢Xq\[ûÉÞB&–)Ý+1ü¶î•fù‹<aõ¶_–:¾‘|ö1¹#l<=õ¾G…º9%ší§oý篘bš¸Ø[Qh÷¸y¤SUÂ}¶çtÂÐŒL臬b;¢·Ÿ·0¬ÚIuëÅW 𹏲—æVÞ45µK-!7uº˜-Åj`g_d‰ÃÉ“-6|ùÞŒŠ-•ŠxxýÂúÂéÏÎ §ã=î–g(±>ûüM”§'ç›YK¦¬ÄlîîH"5–¼üFvZŽs}Á_™â±äU¯ArªS›ô±….j(ë2õ>è ½ 󉣑ö5)†'ó;Šñ#•¿nU{ÿ‡ù­$â*S“†¯É©bíï1ÃsŽBüœ4¯8ö‡a³µ>1–z.­¶ D-ŸQAmeî¼4NDÛ£‹ç48 >1Ð!.ôj&bóY¯èJÚ$”B¹¥žSÒ"jòvCŠ$%ݪq@ê9ÄvŠ®ÁiÄFÝà>DÊWª¯9)•Ô0"KÆ»]…YȰÄϸõøöø}òÛ!lp¹­7(¶­UåóO†ÞfKØ÷¸×w'âñ„.u[ÄB¸YiÆå*œ%ø ä®ìVaˆ™?üŒ€ ã¹&naÑ:BúÄ5<Ε`ƒµ£°-BØ÷{šñQ‘eúÖKëäÕ3esLH;p,†!èÊC¡Ú ÄWöÏò•ž’Ýf—º0\¶PHb61ÚOïŠ"çúö3À`÷’‰(♌ª±]5’„¬¶nA»¯-á°Z0?.?­lSTˆ¨t¬©àQž ©ž¸BnÞÿ wòŠüÀ ãV(†ßb¦>ƾ¶V 𯙹²™’œ8éꑎ>ü¹ør;V6ŽA®«ê좱·öŒǰÒB.[ìdY¯¿FFÒÐc%Gg6Ýi¥x‡ÚÙ4ÎB#“IÁÎÅ*1 —(ýßXºF}J/:Ä <¦ º_JDÊbhn6]³¡ ú ?oÓ×"7˜<é8ÎÀò‹²‰QñØqëõÞ¢þ7¡4¼»'Æ0¤¡S”paør1—F‡ ¥™Q¬¾„Iï;è±]Ø:ð5Y’lÎÊ’÷*}ÝJ{PU8k{E?ÑÇB¶ Ðë“)ÛB¶èüöRPg#¨÷&¾[~~•¬Áçkè¾#«²E2l€_Déq¿ËÛºð‘¯}Mÿño×·iã#ÆV#Ø«hÊNèTÃ%SxWßß±€Óì{(#oq’“fÊlAá)è­„ŽöÞᵊQ„ªY-6¡Ì!ÙAÌÇv¿þdçy>s„e@\^eÞ¼JŽ|£â{!Ñçöå"Ÿ#¼rûä?MáØ;w£\ÌmHá?<ˆ:ÖšÎÜŠ2¼þ¿Û×_õ"æ+å‘ÏyÖœçfÍcß0ᤌípG'yÃPb`«°ÜÍØr›y€ãl0¤ûNê‰TA‘^¹ÊÖXÈ1³§¾ìÄÆ%mx˜¦VÐY¸Î¢;¥_MΈš¥qÎÿ¥9&ãÞ& |¾@Û¨kóëÙÈXŒj—uuh÷O½Ât»Âðýö©/‘ÇêLŠ×è›"N·Â)iOÉ‘Sʤqn¶0ã‰SM0¨Ôþ¿à‚ȵ$’ŸŸŠØÉn¤|îGÁ­ Ç€ŒØå™o?ªRö¤Ð‚Zç/á(n©èõ‚Ý6ÁÒ‘fyÿd€¨Ëy°PÓ ïÐèd"PÛShDâ$Ç"]§ÙsGÝ! n»³VS?„|)«Õ–ÍJó¢Óý«×†Ë¤ûu…È4ä0/ä/§)¿"ËPEGly‡cŽûà%;Áσl°ì¶EN]Ö VÛU†ÜÛ¡ÛX­ÈDÊ‘ßô_o}¹7¿6Ïǹ¾5Ôø†ëᛓõhé´ª¼"zë÷ìÐohj/Ð~ªaÉ>Ýÿ¬nØ“è< Í…âãÒ-ˉIV÷àÞ+Æ¥²Qd#–]S¾KS)Nv„^ƒ¹¾ÿÅhÁt*yºZháZ{mí÷ÊÚ â¦s­{Þ!CîˆLZyz'Û›ç¹K–éä3ñ튦f€\G“QVkûX0€ örÓ>^6iS—c© Ce›¥Ÿò)ÚD`©Ö”ùÛ“úƆSF]ì÷!^ -÷ù‡´Ëz–º)ªòù!ìŽÙ†Nï&¸Aø *“±Ã' ò…De+„œÔË5‘ä8£hž_Éy,ww³%ao#Ú„iDa„ïÂ%Î< Š ®Â\?úÇÔ* «ý(\]±‘Å+§ü›¦Y+z=öÞ'Ÿî¿qªøà¢šî©™Ÿ¶r+†Ä„íàxÃöÜæK‡Mnª™r„í31ÈïÈΉ4,ÂmDOTÊ6ÔrK¼yRqN Vƒ•ŸÉζ¸#FÖpÝÐLPÆ++“2 ')p²Řy/_P~hX¨t½»SOúÖÙxøw(êöWp,ð¦è³WÑâ¡h#ž…ÈïÖCgŒ€¬)æ~¼ç–Jp ¹³÷Ó†y–(ÔÖ3¦´0Ò1>‡ŸË-àõ:d:€Îå²c™S\`ßh©6ʨ2êUø€iÑË2Íy·úè‚¢½±ºy]áùyüá+ èëò ´ìõl6«gχEZÇŽn¤Ó‘]KgW>±¬$Ê ‹³‹¸éDÝ;zß’’3 Ü’ï ÄÙ(Q;pèhìüïd¸s¥yÿkká´Æ–JA7î!žñæÏœÔDtœ€„Ýâ#”¾šÈ®æ²Qkb8©49bôçÇ'n±Å ¦Ý¡ZT˜§x¾ý`包~²òÅ»¨êñ0Þµ\i:š$’Ò« ÈÍ’¼Å+OyÝ ç’8dÜcb¯ûëís©²´cš~ÑŸ&ò)Ì$¼¥Cé…RÊø%)ÇÎ!¢ÈÜ8&Le ãyo fYs36\N³Ûs:ebûW/΂¹ÈìV±,Üžœe_ð@C,0Á ÍÝHù›Ýé^ H$Z8ŸÑÿ,L rEã~èé‚:)¡Dœo÷"½tBåIÕÐdö{ÝÁ˜ž·=G®¨Ïà’†5¸JâÂEHý¶ŠÁ¿åï.s3›Ba&Euny:º·4†g S1´/~/fâ!^8bz9‰E^£¸y E.[Wl+a8ÇÑÌóoÓÏìpVGÒøÉGÒÓÃÿ(ÛmZ,6Ë8,ßIßÇÃìÊhh Ðz§áÖ–×jçÿAXèJÚÉ ½Ù…°NÿÉáŠû–œ R9ØVðÔìý¢$Þy0{G5Âþ/|ó'†|Ìžô”<.tFÊËNƒeu0[ )屩RˆO='>›“MVÂPGמµ9ŠÉ{C¦PZå5š³Mär¹£n³¶åJ±ñ5z•Sr!±ãýÿñ¢X±çcjb!§nA㥜ž•eÝá< ÷îÙ)8Iäü?´z•L£œYͲG“E®ËcÕv榭&~æÉ-ýÅà{N²¦·œm\e_¿DWCd©§4GWJçÿ—ZƒúHT±Jæa§{:‡Rk„’ð ætϾ,évpa18+$ Ý( a –l6­FË 0(›ˆX&XZÜQÀÖé”@«BŸÑÓ/°ôªŠ,‰Z%ú±bTÍpr©Ú‹ÕçÍ ²Že­G›:vW#/ò Y Œ[Æû}¤JC©#ál'XÀ=®Ûoô·ô•ã=‰x‘êõªyð.ühƒþø—AêèP‰?tA”CÆÑ@AÅ¥~á;‰œé+ç›,à¡Xõ.Ȃٸd¹ 3]Aõ“ôJü`ÏÙ=pé$½Ç ½ˆwDFh)òaBP‚PœµcSžÐ@‘2üõˆó}E¾Nª{I×½¿ùfµ`6L¬—äš'Þ*>"…äw•ød๠5ó‹]µ(9õ õ5³ªöÒØ¤ñOv” !†Ì¹E–)Éù7G­Q<¥yÇcvS&¶ÒœÄñºúA–ž•à¯Z¨ŸâJé~h/–PŽÁNŸªì(ÔåLI£ñ#]V’gæ·'ƒ´´zÚäù¼êØ?ðR\ j"cÌ«žÎçSHõ-3ñî¬Ï ÞøÎp; €Fˆ‰¶Ž¨øˆ‘¼¬su¨¹F+Ä—òe®)Ø{»ÞÁ<,<-ø£ª]\턇J°œlYñ LÖÄ›k~ ÒÝÍâ¬éwNžQð9<ë)¶ !ø‹ƒ/hµT¿À›¯NGIEúíÃ\c·Þ7¶þY… Ÿ=•@—£ŸøæoÄêLy]˜÷ƦJáóAt‡°óÃ,“ºP‰«;ƒ3 01)Æn|ãdâWhŒá|‡®Ä=dd#òŠÒ[ähò þEdÇîCÈ)¸ÚC…¦;0šÌq_lÕ1*´—÷*ð>pÀ”ƒ”Tav—Õ#Ô‡šØ¥‡µÎM¾Ýk'7Jñ²¼Š¡u´œl5û~|¡Ð¨¨l~ç.©Â{E•s”G‘üPá¨n|•X“VoïO‹mCUXÛÆ=<ƒ-Õ2ŽJ~Ü;Å^uêXgPÜÕ-Õe@ª¦še^]º%ò’<\Š©Ãà×[B({ÇÈøgaŸ•~ƒÞ€Ú²‘á”Û¸YX…ïÍ).5Oùã®Óºl“*ŠS宼íØæciÒ]øZʦíZk.&îUu!¡gN7E«V„€R lŸ›wê2°ÃsÊwB˜ô:Äf³3Ê(¸‡ß ƤƒÛDì$¸ûEÆS±—Áºyàh½Ù ‚ˌṃâSì(5+MÀ,ìý3¡¾¥'f—CÛ² ÝoPXHcºícßµÜoQ ²ð=£¿ë7ºAÛý7ô>ŠÝ{— Ê[Ão#€oTÎ…:0Îø=º§;̽SôΟÒe½ÂmT&ÙW_»,!ø‹Tø¸8«„º°V;u÷¹©9“f 1«ç6"TÉ=¢þ?V$üðÉÌ¢eLäqdHá š˜¥ I8•'“À¯ +´®ÚáÏnT“íM ½B ºTåöjfÖABTf …ÒÉfÓÜÎÞá_-ºÓ~ ÛqQ9æ¬8úǪÝÄ"á]—S$ð3„H÷¿F$–;S@ —' z™‡pˆ.íàaý€=P^’팑׋ðH\ËX zÐ F‡[\¸¡Ù¬éSW'ÖÛ .4XšÃÍ27a€£3A^?wÿPmÂ&G\ß{M‡°Ì×Ù·Ž×ÄYãuý²ÜÁA „´\!Hwð³‰KÆáíª¿¦‹Ì+?óäY¨A®…à€ŸB Ùh]8’å(Ä6Á]jË9Fer]ÌÿcµÁxFDCè­ô,t&!—½WÓwÑáv«G!œº#=E,SHºªð+d–z¼{Oã¸"(Ã÷‹ëáÉP¿œ­3Ò¦ëQ 9|w?{ äL1ܹf~ýÅU±âOƒ_ˆ†ê€ÈH”@ÛТϓ1í!-È«R%ÔàÖ@0ÓÊß¹ÀA÷Ñý¾$Æ@›"ÎÌ7:HŸµc O4üûwͪS`ÍšõŽ5 Þ>6}h•óÑj<ϪîmLH £õ¼Kƒ#Í­9Å8Ãy§:xÎ`wŸ¢œÓ;5p†Å+ȵRÑå¦ôœ÷-'k ÷}׽й bpgŠ‹?ê +h;H. ,7œ6>o>T Šƒ}ÇE!cÐ+–ȵû®ëÍ&Õå_7‡Ä ”ž¼<ìÔ×ÒÝ;I.Šg5Éõv›o“˜Õ¯ž+ïËJf¾#QSå¥i4^º›¿ês=rå;–z›Ç]¶ÆgW á –Æøî uGsì³8ˆ¹hš#öXœ¸¨ /Õ÷qBh+¾RL¥¯}ønÝ®5ÒÒeˆˆ—†¡tòÙ` £cfRºÂ‘Ê|C||Oµý!8É¿™`Ø&=DòˆÙ×’½ »R¯µÊäçU¨¢[.dŽQÖ¸~+(SX+ô„;á²Oô?q—zÂÝf)Çû*š±i¾…ZK-‡“8Qä^ÀgTåÅÔï͈DÁ˜Hß0Ð ¡7å@Käž´dhôÚ ùl|òh£%ÀåfÅÕÆ@,ÁŒï ѹ »“ÀÌÝÝÌKnñúKîÒ›aJ…gÅŒ‡Xe=Ü)1¼âCåM-5Žu9žµs¡g‰‡Fp€Œ´šä©ž­g§¬Oñ€;Ñ¿m*i¥N\é´í­ÿ«¡ð%µMë€] ¯ùLÀ~)8ü“VÌJ=bTÈ1 endstream endobj 179 0 obj << /Length1 1452 /Length2 2008 /Length3 0 /Length 2935 /Filter /FlateDecode >> stream xÚT 8Tk–êÇDE%©ØÂä:ƒ2T®ƒŒëH’S¶™=lÆæb(ŠPB%]¨èBººu8¢R8.QŠä’K”ÜÉIÒAå߃rêÿŸçÿŸý<{ïµÖ»Ö·Ö÷½ï§ªä@Ó6a°=! áiq2`fëìLÔŽ@ÐÁ¨ª:Ã<ôÝQu8\˜ÿ0ã@ õ™ƒ<hËF€í|@$D}2q™@tƒï@6‡ ˜ƒ0°ÅÛÙÄŨš±ýƒ9°—7]çû/ FWˆ›´fÒ?ˆÓA°yÞº"d46†xÁ?•P3òæñüÉx¼@ À~\›ãµU] ÀÂ,ÐÌ´GD'œ›KçÀþ<.Ž ³„3â…eÐm¶@fl??áq1ÂþÌaDG÷=?w¸¾[€ìÿn1a„ÁŽÁàûãw p²6ŸÃ .Ì¼Ï âza3‰@D÷Æ pö‡f‚D¡!t¿?Û`¢c@¡0B?˜ý\0x>ºÿŸŸ- ‘0`:ð„¼`3_uCÌY=ì& ô#áóãï7”a 6 ž‡Ï1ÞæJµ·ÐœùGÐÔ”ì×&Ú:$]@OGÐ7ÐB®âÂs]æ3­&0˜mÝ¥ï Î1@mNêÀϵìØ(o!@mžæî=}ÿo²Ï¤ü7Ž «üOšÿÚ…ÏbÍÄÕfÿý`Vðå-Ÿ‡jÀ–*ùºš®-Ä€ù~¿F­y ªÄ‹õc#a.‚0î=ÃY÷¡ÎX09°¹°ðf´‰Â/1T\t_ôö࢔œ A¨v~^Ñ¡³B‘éèé ‡c(“tôô€ýDT (h†Ä‡°yh €N 0ÙŒðHõõ¼‰Ð5kéxÓÖ&€§Ì[$o=o¡Hêk3£Í[ºÞyÆú©U:ŸÃAõ:Ã&tŽïöÌåAAóª‘M7Œôù=òÁß9&kÚÝÏtt¥*FcÆÄw¾³XØëxÈÌhâ#)-¶Ù¤øeOìD§Ì Î黾®²ß=!çbɲ¯ò,fzvi…ÔÊl™äRù:=6¹y†—ìHÓcÁ˜q½új­€Ý Éý–FØ‚¬Ï™Þ#bó‡p’¢ÏŽÅŠÉmÞL’,2I.Ê2½cRÿò¡µ wÔøÙð©õ”þ‰såOtôÞV´ÜÒZ¿9·v`@Êßf,y`kR_©¾¼G-P¯ú®ÔBn*^íÐØƒÈp5OîS‡øt]y¦óèÝÁt¾ý†ÈpNÁðïﬞßÎÐéz±mÌÙihS¤†×î“ݸe-TSñ¬{o9:ùâñjŒvi[D×0õʪOߦ¼‹k|Ùz¿ë£ž56í¨US'…ÃWèù;5УᴄcïSsGǽl™¼âoœ²Ý27¿«zÙGT/£ŸF•‹«ß\žz­ö"èíbÏ]Iæˆâ ×Ï©©mWðn9C×\óÜë'¢Œ¤c‚ä(ÏÖ agR˜s6h$Ù ¶Äí5ŠÉvZI,[bõ— ´ÓôL’£JÁÇv)öÇz)Ë[+ŽŸOèžlýÐz{Œódo{Áá=õª™R…ûÚÎŒ-ÌåWÇöI ÇÇhm).wQ{„“l‘¿S¸}`lùÃè‘…JTéüÉ”·9\³×y.×*pä¬÷¾7Ÿô—ÜsÍøY¢öu©]Çû½WV¸wJ³ øÇc†L) ÷œ žÆI{Þ'6~«Ûš£l¢bCtXÀ»ÆùÉ<°$¬‰J{mзŒì6¾ñBáõú¥uôŽ•½mG{þø:vÝ…ó©­›/Þ(O½d°;œº6CM{œs7Œz"|,/Ðð뛫¡ f8"w¦aDRëÞ«ã/¶Z}Á6YäQÖ|;ÒOax®¸¤•”ÚšmP‘øir{š´À|‡îŸÖÔ¶|·!ßhUÖD´}"~¢Â¿üíåpwÅÊn“ò3Gåžz¢ë'/#Ú'»+e!šPÓXJ“Õ¨º›–~~[ØíŒ]·x­–)>õ×C|SÛû–_®rº÷ÖXÓúèÐaäðe‡þµ¾v%ñâñ{_1*)î—^µÉ8w6Òj_ˆA½˜¼î+¿êéÛ=òãDóúaÎ^Jê½iQJÉêŽ0©ØÑŠ­ÿ‚J¯ovéIˆM­ïμQ|ZYámÉ2µ¬WË^ÙæYXŠ®iÒN¢)¿Ü[]μ@»–ªî5é~É’߇TGä­)&UÅÄ6-Ín’Ï• æÈ!¯â tm³ï†^û°ZÎã¸ÅyEÙ>£ÉÛtðÕÙ¡¨ßN¿Óâytœ¡;íÛ-}±"̰Œ«+Ó?Wcyö[£ EÆæ­†¬LUN;±Jz·©Î,Q¹C3êu,ò \ó5=_&nÝ¢v7-ÏŽµŸ3¢ÝFq¶.’ÅØru@p½ä„4óvÁÑÚ˜þÇm6ÓI’u'ÒÄj¿N†fK¹ÏÓ^Wâ" e'—oï¾®4ùªÞúÓž¾Oa›·“—ö\ù”åZË sˆñë•Ht‹‰ÿå2ás:v‚´ÙfÙ)Ó$ ’ÃVžä"•…Ê eÒ Ûé äNõ§Q“’ÉuûX¡ÐÒ÷I‰ÃuPÙ3…×z“GjÖJ(—^•;—Viip›+tgU›¯ˆíºAÅΧS¾m ôe~vîrϸZztéÎçùâšæðæûƒ<ìúoEÿaË´©’øaÃ9÷¤ð‚È®Øß†ÙçÛ¾¢k±ý+uýˆ ‡›“"«Þ`=õ´ôÚT}Ú%¥&öÀ‰.•%¹aLcåå}u[£UÝ-jÛ•þõ¤æ©Ø“¡‹[†jÖŸ¹y\¡¡s¬pEHîÞì$%RÑΪ.$Je·ŸÝ˜àZ5ûlæëºG©þ½=^\ ®|òôbûˆ?”¬ˆQQ«Û**·*~μð&N=ü&'³0x ÇÐ4ÏòÖô%»g> stream xÚŒúePÚÒ ãÜ%ÀàîÁÝÝ]ww÷àîîîîNp  4àôNö>ggŸ÷ûªî-ª`žÖ§{u¯5?  QRe6s0J8Ø»2°02óDåÕÔxÌÌlŒÌ̬jV®¶Àÿˆ(4€Î.Vö¼ÿ2u»‚dbÆ® ;y{€Œ›-€… ÀÂÉËÂÅËÌ `efæù¯¡ƒ3/@ÌØÝÊ Ïq°º Pˆ:8z9[YXº‚Òü÷#€Ú”ÀÂÃÃEÿ—;@Øèlejl7vµÚ2šÛTL­€®^ÿ‚úƒ¥««#/“‡‡£± £ƒ³… =ÀÃÊÕ t:»Í¿ (Ûÿ®Œ fiåò·\ÕÁÜÕÃØ l­Lö. 7{3 3” *-PtÚÿm,÷·=à?½°0²üî?Þ¿YÙÿålljê`çhlïeeo0·²%ä]=]éÆöf¿ m]@þÆîÆV¶Æ& ƒ¿˜$„•Æ ÿSž‹©³•£« £‹•íï™~‡uYÜÞLÔÁÎhïê‚𛟘•3ÐÔv/¦¿OÖÆÞÁÃÞç?ÀÜÊÞÌüwfnŽLêöVNn@i±ÿ˜€Dd@W3337 èzšZ2ý¯æåüKù—TŸ£ƒ#ÀTÐÏÊúƒàãbì¸:»ý|þ­ø_„ÀÂ0³2u˜-¬ìþD‰æcÐá;[yt™A³Ç`þýóÏ'}Ðx™9ØÛzý1ÿë|™4µ$4täéþ®øˆˆƒ'À‡ÀÀÊÆà`gpòpüþ7ˆ’±ÕH0ÿñ”¶7wðüÍÔ¤ÿòuÿÏñSÿg5hÿKÁ4³@õŸ×cæ`6ýbùÿ<è¹üÿ›ïßQþßFüÿ’p³µýKMý—þÿGmlgeëõÐȺ¹‚Æ_Þ´öÿ×Tø÷ÊÊͬÜìþ¯VÚÕ´Âö¶ÿ´ÑÊEÂÊh¦dåjjù×`ü-Vÿ½b¶Vö@%«ßw €…™ùÿè@{ejº7\@óø— Z›ÿÍ(noê`ö{¿X98ÆÎÎÆ^Ì 1båàø°€Ñ èùטí\A.Pu~sg„ßÊÉ`þ-úq˜Dþ .“èÄ `ûƒxLâÿ .f“ÄÄ`’üƒXLR€Iúb0ÉüA .²ˆ‹Üâ"ÿ¸(üA .Šÿ n¥?ÄEùqQùƒ@\Tÿ µ?ÄEýqÑøƒ@\4ÿ ­?ÄEûÄâ¢óüŒÿ P>cS++S+gS7»ä íÉAhåbó§Ý¿]ÿø‚ršüA cS[cˤ,¬ì¿ÅÎÌ@­0qÙA¯œù¿‚±ý#ÿ{WÿQ€j1ýq€rš:Ø‚õ¦ì¿%vvjú=ÁLfÿ‚ ”À?@]þOÎßz'7ÐÒÿWºŸ˜@ãjkl÷¯( úÌÿDY˜[¹ÿ+ìoµƒ›ó¿@&’€ô¿ßcà¿M@ÜÿôŠtÚ–^Ž–@ûY€dVÿ‚ Ã³ùuÃö_Ôª1fµáO(«=h›ÿ mïfgòûµøWJЫÀäð‡(¦Ã¿¼XX@…8þQƒr8‚nûÿ9Lv–ÿHÿ÷(Ù@Πú_¦œɬþ;¨q޶n.ÿÊ ’8ýiåoätùë¾ú'6Ïo¡Ãï‰ýwJP‹ÿÕqPÑs€œ\€vVÿ;Q¿m€îÿ:PÐ3øCP!ÿgÎY@uüI za˜\-ÿšP£\=þåŠáögÊA9ÿú¾ãbêàüïnƒNØý_DØã_Ë êù/Êêõ‡$ÈÕèüwÊÿ¹®MÝœAgãú×{ ºËÿ‹ÿúnzM¾|v0å µn íyh&ð`8˜å_¢8ÐÌ aðùâÜëöˆ ›JSŸ¼í|'œ:9„º¹'N}+´NüâsÚÙÑ•¬Üýäûl˜¨²pа6=6Wr*Ü:;¬q¿V¼·jÔX]ðÈñtp !oѧ(}DŽÓdpV}*Êb¶ùWó˜iÁÖì‹.DÌ î˜JIX$Wéü¯ÊLÀ¸š ”¶!¯f`.·»íl O3óPJ¦t*åZ8ý< &±Ò˳Üö,á¡{nÕê¤Ü̧ phÊDGxªí3–¾4/->gœÂ s0,W›åfêùQ)ä’éH2¼±šÎ×ÿ«Ÿîyç `Z!Ÿ@£ µ+Í\L,b§Ãs /‚ Vo 7M§­}6„”DH¼ÅúkÆXÓ­^¼Ä3÷p·^J–¡ÈM‚”®êÇdœ^Þ]‚]ýtâŽx‘[\ã’@¦_~ÛlÞæÁ]¯.ÏA2I)i‰áÇ¥pr0•…%œ•Œ‹Ñk8ÄI·8ÏŠ% yËËrälJ?1¿xu#säÔ`Ò÷;ÎsQEuÑÂü/ ýÕ¨þ¶ô½Ü´û²jÆ„;Ö™ÜHb`îk9Scî£óÝÍÏž°­‡!ýÀd^‘ÛkÈi=rÿtþåÄ¢–“À¹Èö¢¸ ì/S˜9ý$û'iMƒÊ-ª´P†r³^ûZŸ,h{IÈDø$Ì0½yÜ%»<‡(57qæŽM£du¿÷Õ>ZßÔ"„l^"5m«å0XZwd,C $Áñ~n:™61]*ò$øå?oAdƒ ÅeP¬“¦?[ÑBÃÆfsÉvxâaÇz5ç(“#=ÅëïT#¼ó=8ÊíÖ.Ø…´8ÿí‚Ìö£9𘷯[)÷8¶ ~]ð‚µS^v¶‚öN˜’€ÜЛP‡Es«‚çuù~DQ›:îÅuº_ÛŸ«Bu Ö Õ61ïcäœÃtaò#ÚÛÜmÚë¶ãë,.ƒ¡ì‹åºÀû.±¸¦c©VÀ˜:Ý;5í£¹7 ÙKY˜û–Ž[Ï6˜Î!©Æ°ºødþ£Gíà à ø{0¡î˜=Àwì¶/V€ý'ciºŒw*'¨ÓýJioe}|Z=¢N`ï)aöÝ™upõ“në×%΃uxÑ7ÝsÌu<|‹¨¸ž¨QlµˆkÃac8b•ƒøI¿"£àM);Ö27¼êeDù+½¡OR~â -êºÜ33S>U k޲UØe¾Õñà _äòk:–EÒíÙ~Ž´_ f³(¨ ããý¤„;(Ôªä¿ÈðÃMh©Qì\CÀEµ2‰ïÕ“!D¦®f©ŽÊ1>ü ¡ËKpú5Þ@tòýê—4Ry‚”¤vë’>R(Êw½ ¹kŠóšœYHÏñï?Ta²a×cœlmöU`2¿òñçÙò5ìÈ/H 8D¿·’"ÀÛ}mŽï¾©’N5àý„¥èÛïÆhðmAíÈí?ÇÃÄèÇO‡@SÉÃW83™0Ć‘ æŸ7×Z e“„ŽwùPº³®×[;DГnÇÄkeWF„T·Ìj…ˆPÒ>ðÄaœÖü…xÓÑk𓽥ýëQpÝS£\áx/}0s?0F­óú<–aV¢ÜæwEÚJµôdÒ\¥qÇ+Ö™—ÙiÙÓG7eLm§#)eAôZY½®MêkQ"§þyòôÁÏà ¯1/Þùµ®OŒÀuçÈû3ý”W¡HÑè {Ï•~Ÿ=&êõ }ã*y‘'å‹/ÑùH»”?;úYŒ W…HðNÖ‡¢ìù¡jLÑÆI¥Ãyðœ A?7ïã!ßÜ{‹a4pgì,4^ü‚c·}ðëB¼›Ýa±c=>À­ÛM#ü%æx¢¨IiKý%ˆ}¯=r€/ëÆnûó›#Ö.%®!BŸ#i@té&ÙŠ¤Œé ¼Dî‘vžC¬\¿pFÙ,ÆÓÒn9ìÍiü‹…øÄº©ŠYºX×Ñõ¯|zC Ôìb_ ·}Ýšo˜wËÊÒ ¦Xä.õi;P*ç±O•¨ÉS3ŒßÝO¯:õ?äfÝIϨV¢h0d0ˆF[ª{J #¤¾w%? .)Á˜;>KåV9“ÏÃ_…efe;ÌújÛ`PlS'÷È[]‹òNŽ˜z}™Tnxñ(˜?ú>OÕÙú 5õòÝ‹$¯Ý›O>ø—m%í]ë”à(€U<–‡u`eÍ|wR&Ù‹d«RûÖFˆ»®|šÞÏŽ Y´rðÛÚÈÄ#/Îà’¡„ñ½ùROhË•Œwókž6o‹ ÆÌ‰¡+¦®oì8ÄûY%ÑE%¥ÛÈ)Â\OXPª~ Ô¸«G¾C½h”žê„¡fw»Öð ØÎ¤ö py.98Ñ`ýËÞhC$ á’ð\ó’oŠSÇ2!Tî /ñåh¯x«ËU솬ÁÅqÀÄÍ×ÌiÉ0’)‘ÌhdGƒd pŒÏc*b¾Eï)›ž ¶B'Óùq/ÌPŽ{ù·¢¡ØÆ­ÅÞÜ¿O¤Õ^o² Œ?À¨ÚOˆ•_‰rãÃ³Ì ¾ |fE¨Ž–9!vÕ÷ï´Á˜’Øtkî) ǰ”‘r÷/™€ªèú™\–»¿X¤\÷s¶ ~.`=g^²€ºš–™¤—áèòÇWŠA3(ðˆ¥ñ¶ëøU²½k÷#ä2t•Îß¡qrΊŸ¥å ‚€PY“â÷;àòæÆõ” ëıóF@kà\;æŽØÚy–‘x»{d•æ(É2¤jž#ø}-L~;@é&pû„qfj0²  ©ùeå [Uí wòsS…UæîK‚ù·Ý4×_ˆþ:MÔ¾´W‡AZIääââàÍ[žÜûVJåp¼½»ð{ï˜,ëõQçáP:-j:óé+§´“¶®£íú1òÈ7Ns#6ôÊM‰–CD0ס‰å¹$"úɹã–üw'xR0ÃüH“½I>¡²/ñ&ŸÈëŒÓ۶תxúàt}1>aêuù;hêïgLøñ;ò)I)r!À¾CÓh žëÕê9’"W-$;²zÙR½±¬ëzWã ±Ö¢’‰þ CS”ê,ÇYD©§a i…ˆ¥ #>}4ïfååÞ+äé8è™> ¹dP B¯÷‰ùíë¯}Š kÁËíUa$•˜ïB¾²J¿PÙ…™"Q¯4wgsSsf-ž¡¤oaêìK3ð-Pª÷ÇÀK± MN’¾ÐÞûæL\¬(ßÈ1ƒêüVMa™o1³;èIïJ¿ý³(KBÊ^¼—¨=K‹HŒôײ~Aø‹-9%úΪ{/£¶€_zA£‰ú“4®ªOæ$+×:ÿ%dåâXD ‘l›Ð¯TeG€HFÒ‘‰€›}×üŸŠ¸Þ l*O(ч_ÚuftÓÓ“)÷&-Å^ï}„•·%E¥¼zTÑFƱ !{¬w>üÐnPó”qÌ/ÛÝ)|Àð:f}Y¸QVÓŠ‡’œ¸f£¬‚ðdÑ– t¦ü¹zÍW¤ mS›É¦’’¨y8hBøÛa?Órîup9QߊÆQ‹ŠíjbƘīVÁìkÜ,ðn`TÓ<]`ð ò°ÒbÐݹ4;½Y˜øZDæ>…Ú´ÀôKÈÅ:ºý *| ImÀ ãu "|r†{†ëÁ÷|%uIînyÿºÿÑÅ®™ÙŽ@uù>Í6(ó]¤š¢½+^1çª<©ÖTÈÞû» §ž±8sæOv.<‚„#yY†Yñ‡vöRF{Âa«hv‹Y]xŸ7k““΋ÒÀŽcάÍí§Õ×62c†Eó²;‹]Û™b6F{Á®Ü76W·×•œÞ‹“+(~ 6ûuìÞØqWNŠ¢–&ª xí÷­èE.óX bñåB¿I¡Xzk;6&.ÆÑ¬%5Øå„S†•6î½_Ì GgÜýЧšk•ók0c%“c…®5ïÝ4Åü(”¶||ztI„¬ƒœjwºÂ QÒ¥’徨Åz›Jb&.C_h]'¾êÕ÷áGÝ‚ðAWe+%ªÜOPÄÑ$UéôŸæ°ß…V»Ï)à¼oÒ…ìM’ŠÀ& q|&"‹Ã3óè‚ý®I¡mÕçÃËÔ,P§SÁ\–ôQ +ðYüé÷IËëÁ#ÃOµ=¬qÇÈU§Œ‘ûXY”RÖÆÍöÓ²L{–/*ç*„ÕWrçHñÏZ³}Û”îŸ&¤ ¥«ËhšÇ·äTpwiã Ú¡•‡,&µêÁܲ4èç“H«( * äfCKHÙÝ7;K‡¾TºwëŒß’@#¬LŸ=mk =ÈEGaúL»ow%ÒÁ~œU ÕÆNž¢s²Ò€;c2£Ù#Šn‰&L"°óÚfÁ翎Œ=iňCʬ÷÷±juõY´_¤ `m2çoÝïÍžE›wŽv(!(hX¼Ek<ˆ–CDй12ˆÏ±Òµ¿Ô›:CÒ]UlVŽÄŠüqo6Ùê±Âƒ‰tŽÏÉ\óŠ4.Ý®n™ÍÂ!ô¼ÞXóºÐýÄŽñy¦Hdc€ÉT(χ·ßŒ4Pø±×}îA_ÉOö‚–ÖÆóßM¡M çfø"²çdE× ’ë‚\Œ…~aÒÁuØ´†]}{-x™¼¥çý~¾å9õ¼O>ÁáU°ÅSѼÁçbœ‰ø‘’å¤)ߟ]Ô?Ìl&ðû0ÎnvÅJ.§@:ÍÉPyÔˆœ»Öõ”¦äY(n)6”n›.ßt&#ÖéåÈÒ^3eÌ =µ ÖuÀeöX$4ñèÜ}`vßIl¿!Ò”åOØWNÔ7æAý07 ñ¡Vhbàû5°Ø‰ x€tÄ`nz•Ò£À÷{¼Ë‰…ÕÛ‚2ñ:Ú÷[ç%¨€.!Þ"/¸³õRÇuX¨±ÖPNÖ°´mk50úaé%Ðc¬{RP§NÁ.XT= ¼åq é9ñs|*Ÿmà€)ŸyÕ}Ø'ñ ²Ó0'rUÇxµØ "£“¬°øÌ;¢Cδx”ËÚ²©“a£e1ṪyBªÏöeœP°Š/’‹{ä»pb3I7ĺÊÝGÜ.Ä83,xëR+üâ¹ãgzÝ’ýŠáàöµ;´NM_I Ó‰¯\y~õ£­»õR* w¹!D:Bs‹ìãÊ4`č߯TÛe•°å\Ù g®P~§wÐZcÜ4Э oÌ|Ÿ[ìaßÞ^O¶Ïn­Öÿ6¼ßþ¢Ò[¸Ù £ýêÝ=ä)ÕÈ£á3¯òž't·iƒÙ2ݘÑÀæÝ5À褴ªuU};ê]= žörcâo+FvôY9£‘ß²O°›_HOŸr1ŽVOµWÕ~* Èi Ãk¨ ä¤ùˆ¦A3jzͺAsÊÚ‹l93 œ‰u ©¼ ÑÃx¨ù«/K??²«©r3œKô¿ç‹¡´$€”h*Ÿ]Çþ‚zmmêcÿ2*u¨¾Šêdϳ»Ôœ­ƒÊpPã¡Ä'[]Ò[õ¸ =ŸªyC¼ vÝSÌ5öˆFid2LÇ7IiÔKEâã3$ƒ¤Œ©×ë>¯°®Uzo¦·åßÔ]Pájýs©‚"¼¦5+†Ü¹Ð‚ŒVOÀêxЧO¤ÜÝ£'Y̹—©Ð6u~g{ïŠð®Mîº+ù¥4±8,åž'¦ðuLŒØn±Úõ´/$µøNŽþO]Ý¥ÿ^‡²`×ÅöuÊkå@;¸iö§ÿU»Ž…âO“áþpïPäÉ9}lÿ}ø1гÛîÉÔ{ӸƊ¾#¿Ôz ŽŸa[3ÛNú³i±Ø>“t’,èö¼ÏœW¨$‘Ѷ ^“ŽÔYçKì÷Õ³‰¤û†<+E„rG¼®íê€Û¶L^J‹·å„hÄ})?$nš­B˜'ÚŠRKj'ä•»QÄŸ¯'±¤ñÑ^•c܇Êêtêãs¿Nð“—cFG`8nµû.ÁHø¬Æº+8H¾Å=4â; ™Ñ§‰#/—2wA˜tœö>eÖqo«é“›ÑÄÉž„–|U_пaPô—¸9EÞ­*}øš¤$Ðâ+f¼ m9“O"ƒß瀊ºX$eIW´^©=I6äp_§ó ¾Š1!³´ì4ç ¦§U%UÞ XØ:[Ÿæ^m©¢Ì4¨Y9Y«€íNŠ7¼ç g®§÷Šš5^¬>Ýx‰]î¬õùQ´õUÞ‚jìù[eš* O ¾cÕãFñûKÔ6ºBôïÈžÒpä ”hëVM$ Æ»­¹~ÝúV ¯å,ÇßsÌŒ}·WaY dïþF.h€á‘ž4ÇïoúNÓ™ ¬œÈ¬KèÈŸ±õp´áÐeƒuÂÉ€%cÀ™Ê_¾¿;õÔ¾§l¹`×W-¼kžF„ªˆGµÛ<»'’ÉZhªkx¥,È~Z €H!õ"Ï*ŒTÏx}צPfšì/ƬÆjTêé®3U÷º ÏOU»kn9$ý‡îY;]KU3Ó‹èçÛ„RkŒõN•ýµ¤"“ßj%ÃÔ %Ä<·Vd†R ä˜ îL î¿>uÄm©6ºÖñ:¬rñÀù°ýð½qŠeLL8S]¾Ï;B?õ ³¦Z\0ÇiÒÈëÍŒÒóó{í2,rVzâÉ?',ÔYŒl3\±ÚEÿÖ\w»FCÊ¿fÝKü²9˜˜øRPòcý͇OýQP#Þ¹èçV:Ùt6ëÒõ¨Tm¶lÃf½ƒÊiAüóG5{= ¡|Ó…­ô5^>ëäžÕáÅ[ñ*Œpîj3-3›}q™ˆwp®kûgi%T„äÀ…ª« ‘­¾m2ÿY y%™uŽ¶ŽŸèŸ!%v+(㥂Yr7ñ‚ÏuŒ:×yd­j+cy‡êQÔ¾t¸}׫À®W\-íÏ™üéX)È6Š;MUXI Ë—s0 †íúã1—Œ‡H<Ô”Á5ø]m‘e7¾r!ò­ì7W”äQr6Èšˆ¢›$¥Ç}S‹¢:°2Ú‡ÌÒJ Ç%„À=50r w™ÄIú¦¶äs ¢t1ŸŽ»àUMT˜ÝgÂKȘ¹zÝ[)kŽàÏ7~I–9’0»€‘µ Åv®ì3ÿå2¡U~[7=äÁì×äDíHP31 øvø-x“”ŸßÜ1·ÖXÔØÏiáÅ©‰âIl¤¥k¡P7…g'H¢Ï(gB®)ýrl<"–RÂ…xÜŒrªüåÜ_ûPÌòûâù XxW­ø+-‰CW‹JÕšýuóM7“u6ÖÑ?§BÆ{(\krjÍéEAF§¼| Úv,ö”åµ³~Éë5¸–p!!óÖKˆŒÑ–†°3ò<új0Eu±}›ïã;^Rš9W#´N0&šxG×>?ÚF›ÉÅí+îàSO ]d+Z €_*‡¯;V þd‚0ù´*ˆž–YÄ–Ï£*ˆ µŽE½ƒÚEÀ½¤P+Ò ƒ b!˜‘§ tW÷™§J­ž~=JÔùRi†5³åb¦G(!n7h6‡Áø¥ûDb÷*Á8%veNù˜ 6 {g~þ0‹X®6> ¯ÑuÔxçÅÃÔŠ#Gò8B`N¡y‘$^.c­ID“΋É?Å@á ?]à?º{g¯3à…Œ÷mî˜ô`!õÓÕ )J+®X½`MܽYàûÏ0X¿ Ûªælj<8õûæøÓòX¯·G‹læYûŠQ_OÉI_~)—‡-JùzìÔãʪ—+•îÏ—¤ˆ”jW+B«-Ò†‰«F}QHrášJݳµÙî{Ëž4øñZc]ð†ì“aòL W*æÁ•EïE ›¸—~HiDLä^ö(VÜôƒ«ÂÛ¨óØð„^Aî&'yÞØ}ÊBz¨m Éå¾3àÙªýs‚ÑÈñ=`’¬1`ýêÕÊmàFŒŠVˆ þÛbß»x2å L:²'^É:ªnèŸaÀe©üT—'<ÔDZÉe* =¸§¥•VUÙL-)gÁæ 0¸pUÑùW£hf^úѤjÀË.š^¹xâqïa¡lMf«IÓÚ2NI³©éÅJ4'q ‹Á¾‡>–€ºhVÒUUƒø¦É†Ò´‘Oë—W^flŠ×%MpR,Ó|Üdºsœ75TÍš6zÎ?ó‰»ï¸½=#µt:/IÜ|Éë%“|ü0ßñÝ8"uº 9#¥ÖrFŠ?ÊözâQϱӞB\L(زOõ¶â´GÔiº9oØ7³kI.ÇÇL.ðï´KpäPÕ ¯\Æe÷x’°õ«ÇÓßx”Èë‰øŠHÈB2áÄ]ápBc ݦ9aÑ:¨Ëcªû0B&Â&½–ÇÛ«eŽHí^›ï«*Ö¾yD8¯ñË÷òò}ó²Fé:V*‹3¼‹{[n|ÕT¿&š&&®éX@ÈЭ)k« ÉsoÌ\*uÊÔ:ë#̈u -*ü¯G®Å;æMÛÔgF0_sD>±kè‰%O Û¸ìŒC¸º b—Nqe1ͼ‡ÂÞ{'}ë‚°’ÏL„Øñ$ȱûÁ6ǰ;Igù:$V«íº ‹8ýurúU®î¦F Ñ3?#',^{;$ p>’VN¬TJÈÍE·Êº¨‚ç5kÞѯ(ŽF ’fcweÔ¬+›e'Ή`z&7H§*l“ÕMú4‹ÁäBœ?;7o¨4Í«X}?Êô¹‚¹_kTKÄ÷]J‚€Èk_¡Ú|v1õöŠú7¿oí¢¦¹¢œ,¶Q 6EGL¬â‹F;êãèýw`,»4Uc›Œ)òÕd¾Nò¼¥¨jm¹a^¼î ëV4”Þo}:3Iƒk6“øb †„_õva¯àhÃ4eSŽ>Ù¯Fº¾¦¢„èIGfÆuÏË{e™…GÕ³Žú驺Éð[0÷ÇÓ|6Eý™ü^WoÞØú«þvÛÑàÏ ØÅž--$B1> )*BÀ&º¤Èð¶Á‚ª¦‡'­Ò­¾¼kAÏ£\B=Êà›µaŸ>!Ù"{úþÂÙH «V\,g„‡ôYxÖ}] -3ÆqCbÉõ³]´ªÁ¹Áßë‡W¸F"ZÒÏÖë_-‡˜âǨ$’~ê¢{!×åmXvÃ¥ÌÀ¢¯g uú<}lrU©5U{$§ß&Тoó vޤ V¬qw Ú§8±ÎI³ãž“%Iòje{*Ð^ØBK/F!Ê/Ü“~Mû„0¬Î”å²¶K¦aÝb,ÜO_¥n=ýÆ£œWXlrLqtGn“ü…‰ö,¤ J+¯ü%ný½³Æ“ܦ°7—š(œ^Ú§O#œf—rÚÝ£xýÃÁ05á9ùž›\`:%'ñÚ|Q%AðR“|ŠÑ(™¥ô±¡“eG…nž‡"ú~»³bÉZ/­:8ºÐ&9s–´Ø‚bZÃe¦Ž®K,aA/Ù÷àxà-!^´Ñzòw¤£’‚•}·ý²HÔª?ͼìü¨Á=âyøÈBðže jÝñTÙ°ƒ­¹×F…?½×ÂüðÄ»’²5 ï¼`r2{UéQªé?{ñþ'?É®ÖÏõÈÃþøRŒl×·ª¡qK CzI^kãs• y‘f8ÜEî‰&[¡)žZ-=ý·ÔíVº_|¼6ÃJ‘U %0°Ýª”mŒÖ©ç.ßd.R‰¶[m²;®;a àu$ÜXW|G$Cc«wxØ”AtñðBízG¦¨ÒÂlóºH ÷ ˜jØßø©"óR({ø»)ç:}¥qÚ#Þ5t»ùÇç ;«ÁÕXÑ„õØì5Õ¥N†Å¼É3£¶ÿ¹ÆÕn²7LiÍCEÅ1/xþS³(Åp<ÉÊdÒäÖŒ…ÉctеjH‹‹“F8S«]¨ Km]1š›MƒËÅËÇöº‘OxÅÄz" QAÉPö9AJoJº \ú…uáÎó,rÆIþ)=í3{©£­˜¿FÄó* ¸Êl˜õ¤¤1n¤þtš™ŸùsÂÕ£vÈäJ]ž*Û=ú®v°<Í]eaJ¢÷b88²öìêäݰ›ý‘ߋͬhüà—Âç¯Qå^Ôª|y“§²*¸°\ï¯á0b ]ÑÁqöä-r^2¼‡ø„‘8Xž¦v˜_UJ ¶Šå¸”^kt°¾1ül©´‚.öä¿}»!3:C'+3…ÑyO®ÀK”;dæ?3™Y‘_9ü&§¾p‹=Ÿ<àéc·7¡ƒA¤¾Ìí›·çÖ]ƺP CÇév.¤sxD“†¾‚Pb.š[m*E! ›”úʲÉq°¼d07¥Ž~³˜ÀæHÆÔ$mí(©¡Æ³;÷J³å£¿ÊÅËb+Ñ 'œÕ±Þ¸˜|ÀñÐèÙ04¨mŠs侦Pþ! ÷K¬ Âê×µüc¬ÚééXdyuY ŸÃ"ˆùv™J«Pà«É—duX[Nó éÊû(šÒÝöhèS¤©ª°waçΠòùëJ#î˜''ðFY—C%¸z¡Ä=JŸ¶ìnËF°´Yxu÷Œýõî zd; ×]pÅœs Óß/ã&E¹‹übB‰˜ /ÐæcDνK|¹¢YPØI È&(ï–9€1™­UúD+àý¾_.-ÕbÑ:öÛžðÂL," ­,z–èžòu›â ã7fa•€O‹é…ÍuP“_?6mÅŽÝ(ò±á*†^×?<÷‰†jååd~bˆ¢Jêºi#K7l×Ën±ˆn3J!N\è±/ß–údÚ‚/õÔæŒ·ò³jùy¬Õ°ð(…–>‡Ù ÂîB7ÑŠê0,óôvD¹½U”´ì|fÝp`c7Œ¼8Œ‡ÂWä6<­ ÇØi.Û£±ág=·_'·'ǦÚ+ÛÝÒ¶åhv°jÙ:vUÃ`.Bµ]¹E+hÛ§¥zѿݔuæ³Ù º2kpu×ÇG·í.¦(RàêÅ_*¿€óx’*$x¯ÅÎü¾ï#¡H9yb0$Â,-)®Á`—߃`´!Ë×Ûèb$>ƒ9ܽÐÚÇþýH!3 v.FŽM("ÒDÔÞÌsD.ZßSƒ~JOFý a܉b½n\!¨ÖÒé#ÑȱµEK:°ëœ~ÉÝ›H6~X)ôøóIÑ ™+¼Õ‰‚jëM¤/úžýÍîMç(64—c9{7ëIW2|ñ€²ÿ-euÃ'º™h»ô –üG4h…p~‰¾9Q6Á_²°Å´¹RDdˆãpèý6TŒë0H°%gŸsa)7äM:‰wך †›ºkÜ(½·(jãßȱ])òPfbÇDÁ#·±ÌTÄ×YǺÀÈ¥ C%uüÀóÑ©6™í,¦ä•-ᤠᒠ^Þ\;ˆàöìó¿ÁˆnX·« à»H!Þ´Oå<ñ‰%Öæ ŠgXB»8/æ-1s<ò‰"éðõ9ö'n´_GZ-¾ÖöŒúPe„ U Tš#³-kå`ðUls7Æø£ŽX˦lfC­ŸðýpÆ|¦ðäD¤iö•÷+±0 &LpÌ›æÛÈNËõf«bMˆ)x`$\¢çªÈÔ†nÖH´ê—›à³º4‘=kª±î‰Y¬7õÑ•Sp¸ãY'.<ØÞ2¼ìîPzÈt~«úŠF§K/¯’ì E*¡1röÒÏnj1ŽÎ!vä’¨ äüÚÁþ£‘¢™ÍÚǼæ“Írñ±ÚbG­bõrîÔLjåIM:EygÜ :Ù‚õ‰¿ cê; ›ë¼Í6¢ñE Êy„¦Ï÷Q,lãú ÀBañ°×ë®fóÙ ÞEï<9:KéZ÷âã'ß­ÙÏTÇyA_ÌÕƒ-ÌÑÞ{=§¡±0º_({Á‹·-÷}ê§ÛæLJPš® %èd»³Õ;ã"ÖME(2r‚qº&-ú¸†Ÿ–©¦%DèQF¸ÊŽ&ä´ F.Ξj6·±2^¨Ád†›ÛÈÚ'‰»ý£b®Óͱ Â}’ìbPÕÎЬ£¿g/žÈOœ’MüU²v‰Ý¡”f6ä˜Ï‰á„ªoÅVkÃÕ›\½eƒ÷öôkq"gÌ|dÐW‹³e±—ÍIý.ÁsäÈú8 yõøVÒÒØß4·“쓜4ªN{u}¶hÉTæ…^ÏU \ýètm˜È¶B–Ô.°Ge½8NßQÔÍ ÿ-WÇ‹íE[³¬»ôؤ4ÔÓ$ŸŽ»–áé#Sœx'«am¬™,§ÂÓEè½è‘atPûµÝå/ä|M1X_™coyßl&ÞÓÀŽK´øº˜ùŸÍ¡šs”©U¦ñÀ’ü`ôDÉ%„™¹¥Él<¥Ò—ŸvÚè0]#>S¼ù|’Ëúì²<ÍÝÉö¹¢Z}}¸¼Ó7-òÕ•+›Yg⤪€waÇ&6hÿIÕ5MŠî{UÚPdɅᢚãÇןåᎷ£rQoÂ|Ð#Dì"â†Ó-™t¥q`k+X`›†§ùG±ÁMr5®IÌÏÈèœÛ°•žÎB6¢ž)»ìu/à •{<=‡PаXÓíæþëöÎëÖPC1HÌá:PÐZÚ_†)˜¢ï"—,¿xôı‘ydõÙ“¬tòÚ1ÝrÝ)„3qk—D¦¡Þ>a Ž—O’¥>Ï¥ŸCOK—–¸JøÉ,îÆÅεхæ_©;.‹,`71šôi‹Jž‚*[YùÄj\˜Êok“c2?¿ø$`f ~t¹g¾á„7G“›ÉÅ`›Å”j+™0ÿáyûeVï˜cêªÉ‰+ÀnKñx"•çm'0™Œy‡5 ¶«°Ê§k—qþE‰8ÙâãÌ[á‘–_ÿ%½ì׺1IÐ;·Ñbq~£„=¶Éhu|Ü|¥fm¸sU.iE8s*¿5Õ=+ÓT¤£yŠ¥L݃=»lCbãâè°-ÊíDp¯—ðÑ´³=´äü”þ©ª?aˆ^–Ü4·SRµ°­r6ó˜Ôy £YrUjrœV…±»W(ˆÛ&`ÂW•a&){'?ìé,êK5 x|’ú¹´¬úí²ÖF émökÙûb"‘½-0*éåŒçêB7V=Öâfš"Âfä…òücú³fãáutÓzߪê¿è;G5Kì½T³‘ÛCn6ØC)T(v¿Ög¤}„,਄ PõÍD©‡ Ðä^—ÂbðÕü>”ÂŒáõóë­/ʇ´§NO7—^rJ£¿2eï†üyI¿\”~Ѹ˖eÔGUX"Êc=Æ¥ó»a/åéýJ„°²°ÝÀ`lpälýƒL° ?î›ÈØ”úŠB/AÜܺ@–Q·éæ c‹ÖwŸJ]9¸Gy“Ó_Êʃwªœ×úeÃÖó/Ï!É'¤+Ôg¤&>D¼ÇÕ’”O(=7–Kë ’f%!h½KÁ7Nô°HDÉ›ïæ¤w[,¾Äudtfµ!%Tö>ÄñàÏC\à?ñU€¼•`|%kÿž©Þœø@i¢×‰@õ­s¼HQBjjÊ’ÈÚ¯Íò¡Rx:ER‡7%°Êà¿¿Ë[5lôUfHaUyeÜD^±¡ÖÖTs" Ígà{û¹¤³Âzø°w˜^ÌÏËvŽ“ôõŒ²>> Q辸ó¡|—h¹VNNW÷ˆ·7ϵ'~J ö*íƒTY;E¬õ€!á©4âXµž÷ç~’ƒ…nn“ç2qæ“WËûÁüZ’ldSÇ»¥kühå½dÔeÊ—7dˆû³ÊÒ…-ûÎ^Ñyj?ªõ¡™'ÊíÃnóˆ„î¸Ðq°Sô&†ªÆgLfë¡DI“'·äò¹BœÅ²¯ ÷- s?v›d…Λ*åèÄmÌãÈYwŒ2’!eô7k Ä<\´¾@oÛûˆÞYûfòÒB}n';ä¶K9ÒÕ´X꣙ˆ˜€ÇË?‰ÈGýë2BêlHðÞ_…O¶žü³<ÒûÔxE q ÔÈ¥“Öë&zt™Gz®Ý ɲ˜Å5£[cŒ¶sW{±ÉÙ „di}Üò•N»Õc8´Ü«äsun3þu³B>ÿü-BûìwAs?Û£™ G²¾¬c&bbÈ>¡.è––wfñ)i!€{5nRtV ô; iËïÍ¡ì Ü²¦—ý*în؆‚|_1x@íö®|*…ÅS×§¦Ü[¼L‡š¨Ñ¶Êý§â}ÅŠW£µ‡`â!ið] ¤vXM îmŠ8ð€`E]“T0¡2ëüP CîÊ_@w}‡b–[¦¨—Æ{ßô°lr!<+°£¯Â”:6Xoј¾fãæšm/±˜»æ I¶ÐI/1ðf^íkzx=ìñOuü‹¾ý ì… þÕªt¢³Ü¹Îš(ðOkÆØodÔX¼ñTuäDóT÷½ñ3<ºßÊå9žâ‹*ÈqoÚ ãì:=bUÊŸ±JÓ~˜«¥ï*È'Oa* ç`)Ò 6egÚ+©w;È\hsG¸oœe±èvouÆ G†Ùá3pôDžÙ?!LÇJo°'ɳš=^Œf„[yµ°™…;ƒÊürˆ[ÈX¹é*ZGتýç;5Çû­úæ„e¡¾ŒZLÿÀcnaÐb†Ìe Ó âáCS q[mÀžY”Y««™ƒ¾·-ïŒ^_Ò$ÿð6ù!‡ÍjœÎÑ6%3»ÁÕ]ºg¾íÉ@z€s¦.^áS½ùd–ò01*­?ÿ«å™›V8.U‰Uq;D›»¨–Â;D±::.[~•\ ÷Úgý“ïi™ã÷DGQ8ë5Ó¢h÷™¦D>EQÊ>9U~åìüòž‹ìóÒÇXÎp¢î÷¢ß^>§~A¶$×a0ó?hotàt¹·àF( ¼3kŒ‹À|hJEÐ̉IXBv² 8ÀXùb¼Üüü£@Ÿî)õ,QÜxŠB‚döyËÕc¾j…hŸiÀê¶hls†JEmt$¡ØpQ1‰¿,ž«i§ é>Þ3áóV›êuc¶4[á¦ìªË¯Š{Ç76!ñÈô …í:BL¬ù¹çfé¾`†m“S‰AmN(®¥xf"Û£¦^üÖ”=¤&Q_èéü›e¼¹ë­¤ÎR†šKf9iADxVS¾‰ë …ßõƒJæ¥5C"üJT¡úšJ§-¨´3ÖöiÙØ!UÝo{ƒØ›L§O#gî—–ÍúÙ°ÙÇ"%Èh*ýÝ"^IžW£˜ aÄ(çÐ;ÿû¿7ž—™Š²¿ò^|ßtÏj¾DúHèÓÌÜ[†šæ‡ð<­jÑTÁ*-OÕÈ"éåc` |´;ž8s7ø¥JôÚÙ,V±Y¢VCGÁFƒC„µm*.;#÷¾é’Š®Ø×‘R“Üù °“©‘3Ålj…Pý »çûã#²æÇø ¡¼“ï«4`g¦X-,ËRab'Þp/êäÐ3 °t(‘”ؽë“ú¹êDd”Qr{yýÒ!Ôü¹Ó+gWâ˪Ôtä fï¾3ÜíoN!Ó>ì´Vk’sÒn7³ ¤ÕLêBÖwfË%xóƒlöMÄ"š¯Ú‰¨”\X¥š±9ã8¨=OÞ³y¼½m“XLZýJß{ÍX/»¿)+¶q„9îÏtõ8¸¶øuj7ØYÙÜ¡bnÓÜ;•”X=Ì‘£ßlk¾…)¸uV­'ÑU ÙÉïÃUéÀdÌðüŽmŽNgÖÂþÍ¡p:”~/©G•833A¼nc·ŸìM(Ã[@&³Âo5!š†C(úè—ìMÀÏìç€}¤ör$›Ö@ß ý~V׸ØG}üm›0è÷§<Ìï8>/V/§½1âû™Fù“q˜  ¸ok4áYœÁ\LHLn³«…:–zzDVk{à{«ŽjZ#•“ ¥³©îÜû¸ß#,ì>h¹UÌðéïVSàå0¢!β]áçˆúu,_¡ÊÚ,2Ô‹Ú¢“(B^h蜆Ý+s£¬ª~Ôü’ÝvIiÆ5÷^'订ï~'ÀŸS kN‰ûÿH ·ö¬Ú+ ;ªÜ„ZgFu‰‰ùäÀË|5éDYçE(¨þk,8¸¿sè]¡x`–•üd“;Q¯¹ u…ï…²ƒ+èì÷Ÿýœ‰ôyßäÄÖÍV2àNm—åªÓŸPÔôe°5,«ò D@ryuD˜ ðŽT {¥Ï¼ºÌ+ VãOœå+;]ñn].„QåY÷[ˆÕ›“ÞØ¯^—ašrÄm` –¶\Fùhp6w±PÁ9k'µ÷íXã.¢ð(ê`ô~…zpò‚×Ú 8ifª¢8q_Ç°è­ \Pn:·% ¯ôÉ%"ó‰Ìã¥/© œÜÑãÀ5ˆ2?>¤ï¸ÉM…ÓÒ·‰ÛÖ†%ùªû‡Òàø_!LÑS;°Ä¿G­,û“‹ Rv„^-¶»/L77ìÔ-Iíø»-Z¸¨hB¦Rñ gŒ¥ÿç~g7®”ì*†ôòWà ü¢Ê!¬Y“ÎÑ>V¾üÕ ‰ÜK Wh­‰OÑy=аáM‚(Àtæv`’˜ æø¹3[R¸5'dï¨$árGDzq*|˜Av#ò(S¨-ë9³æ€ê®c×&¾¶0ü[öÆ ^ƒN˜,Á¬ô~°˜‡ÜŒ™ZÝóÊ£Þš ¯[üyWbªœŽPJ“úcã tD°KŽMna0aªÕýÛ?ñSfyz ù˜vBþÄ‹5te=?é ¢QÍTêrîHE«üAi6‹‡pßâcN–aFH46Å/‚-´ìæ·¹+ê«0x7A’`¯èÊž"Ý|zr †š(Eu#nÕƒDKö쯥‹Ô:84ýž-°þL™Y"hCÎõÏÂ3ªÑ›îë~Æeu82ȨyÕ¢;Í”Fm–~þ\¯C;YŸZÞb“ΤnôƒÑ¶Š¥!®³—„uæ%‰c«È‚nñ~L•_0¹%ì8(ÌP.Ñ,G‹nÆŠ|÷ç©òj_Ó‚ wmçpæ³ß‡$$™Ug{AËœÜw:Ú>ÿà‚™`BL(Ûahû“‚vc+G»>$cÐE&h¹ßºr¦É3 aSß‚$´'ËKˆ‰‰±(q>l#7/aV÷ã~÷½ÉÑn0·CK Ú h¨uµ s{4°Ø_7¤C'=ŠÀÛ”{±ðÛñj{ ‘<‹póÆ2›Ü.L([b¹’¹ž û¶é“±ò1Ôçú®ÅÃ)VŽM‹#Ì~ä¡BSée™¯R¾öƒ Áy—:-õ ’¢©Ül)S×#œ„Ðîí g ¿¬b Êܰ1Z(—BO´¶é“=î¤k¿  C²½Áà{D·ƒ€\N“ŒŒI¶å|¦A#^±».ívœ]Ó鸵—¥q$NK!¦–¾ÀbOG¸¡“Ðüd²ÇŒ"uq…µþq…´Nôk~\Ö¸¾ËVWCûꉇž¹´òö¡ƒu›Ãª$á^ïv==5}ñހˑø/úU¡¿Sh¶Fë üsÍfçî” ÀßmÇgd0Ô:>ãÇRÒR¼s1¡•ŒQ-±?Á¿mì|Y¥BaÌòwCÃßô[ï–¶_u=Níqfèìè§z.5û'3´–}xµ¡œûGï‘ ±NUÙòVìõ(,Ò·(Kñ’7=2—ü—-£;5aG|!–›a@å.“Ü ðÙêt}¯[„‹†s«ØŽœ,Ü^5ŒO¼èÈåD´J=5Æ3´Bo[Ò“Ð|³N“Ë€jÓ¹ÚÚÓ5ŽL„8 NȹÇÚ7»±Þ}ÛŠÄœ¢‹]Ù´É çeŸÐ%ÔÛ„L!Èãk; ßè@+’·½˜¢ƒ£±`E`Í‘èžÛ[¾8eXKò·C*™¯ß‘wH„ªù=†Á Úk¥"V÷LVþ¤3˜u~E+q]Øš%ſب> stream xÚmRiTSçLð ´Kl‹ ”ò)" 5ƒ‘´LB £…€‰&¹7äò½ps‚P*ƒˆÅ*U€`¡µR©Ö‚+Å*ŠA¦ò¨)"J”—ò ÐõÖzëûsÎ>û¬³ÏþŽóê %x©0cƒJ÷ÑA<ƒîéèT¦¥³3‡‚¡ö|Ñp*`lét†¥3à`©8’$!€«Èm1R„¤ 8ˆÁ¤˜I€B¡ðWÈäT\¾™jjІa@H` F¤0àDDƆrƒk0w;†QHA¤\(ED Á¨ vb Òùˆ0Bf5ɨsPŒ&abKá¢Z2BDÂIjI›õ-c€5CòÔ…’I̤¸šš±†Ý¿X¡“äV>ú½è6ÏWÒo=æLI”TÖìMÊÿ¨â«ÑdN\läOŒïBV•ÇýB¡<Ê[׫ÐüñiKO{|”9`QÚ“ÎîÚùBMÓvXV’Ç|"zz÷ø…;D<óZvêgㇵ>Û ‹½ðݤ¹’¹¨ÿ®b*«Ïßé’V¸‡hw‰ïÝÚ¸Æ2‡åo5¤º•2àUöðÃ{DXšÞ_õƒ§þöþÊõ5Ȱî³ÄÛ5µ t<Å •Ó2Н´ÏyKT©¡‡¸#¬Ê¥(I•ïEµã<Î[Þú¸±qëaëæô’ GZskRNÝ -–ø}özçÜž>Xô®ç•™Çàç.Á­„yââ§Í*¶‡ûÈ}Öào<ñ’3m$sÛ‘ˆ×ÜkŽîW4CÚó%ÀAq<æ˜þìŽ Êºª&µ¦åˆ7ûÏñYù׃>ü3ç–ºVÒÌ_vçñkÃìÉ´çÁËÃÏg®Nµ±—û‘ntéF¶Aÿ¤'ŸÚ§}.ŠŽª±Ñœ6÷Ò‘ó弑þÂÈNnxû¨ÅEº s_7ô!¯àÀ–ПróM‹µpG_YwÏ#„f_ÕbƱ‹R=.G¾7\šh9õæa‡š¾+#·Ù‰ÊùE?ÐÑ“[~«î§ÜÊ7tÊ‹#¯»­*¤íÚ6Ý!‹\&/ endstream endobj 185 0 obj << /Length1 1608 /Length2 10430 /Length3 0 /Length 11248 /Filter /FlateDecode >> stream xÚ­veTœÝ’5àn¡ñàîîîî4t5îî‚O‚{pww'Xp$hp×÷½sçκßüš™½ÖsªêìÚU»N­¦¥T×b‘A-À²PG7VvA€*ÄÁÂÝU è¨Ì" µ^<¨´´R.` ê( t ôÀ €4ØÀÉ à@¥HA¼] Ö6n€÷:šz LLÌÿ²ü°ðþ§çõ¦+ÄÚ@÷úᶇ:9€Ý^!þǵÀ`€› `±¤ÔÔ TåïåTur`G° Рîna±(C,ÁŽ®`€Ô`ÿÀê‚üUš+ë+–„+pu[B^¯½,ÁN¹˜N`ˆ«ëë7â °v:º½öÀ €8ZÚ»ƒþ"ðj·‚þMÈÉúáðê{S‡ºº¹Zº@œÜ¯YÕ¥eÿÁÓÍèöWnWÈ«µzA-Ýÿ*éoß+Ì«× qt¸½ÜþÊe€ ®Nö@ï×ܯ`N.¿i¸»B­ÿŀය€ìÁ®®¯0¯Øuç_uþKõ@''{ï¿oCÿŽúO7W°½+*çkNK·×ÜÖGT¶¿EÁÑ à`ÿ‡äîôOŸØåï½ÿkf^IAPG{ol…ʦ u{M xÿ?S™õÿNäÿ‰ÿOþ?‘÷'î¿kô_ñÿö=ÿ;´¬»½½*Ðáuþ±`¯Æ  økÇü±@ˆ½÷ýïzà0üï@Ü€¯mp´~•‚•ýFˆ«,Ä R‡¸YÚ¬€ö¯=úÛ®ã»ØCÁ¯ZþÝF Ï¿ù´m –vŽ5WàoØôïÌ_åù›7›‚¬Œ–Ó¿oÓ¿£Ô_UwÓövz%öu¨@Aÿyø CRêðeáàã°p±ó½>6v.€·€ÿ“ïo ŽU€n./€ÑkÑì—þ¿Lþ FÆÑ úkN´Ü€Ž ×ÑúOÃ_nKw—WEÿ~í¯%ÿóü÷ƒÁ^`KÔ¥¨¥P˜mú— ·jÂìÁqi£ÞnøÁp§â:킼 JhW`zÔO2óǪpÖúIÁçïù§§mEÆán{ú®Tðq.™?5COö]ÓN›i1zÆ¡^¬ïÉœò‚!/»îίq MÓ¢G$òÉ6.”“† j¼ <šk'ŒË´Úxüv¬zœêüƒCº¤½›kúþ‘¡Á®3ÄžmR¦¬ø7´B@€”Êd7os—Ë:Ë'O–JÁ̤ð JËÞa$Ö»*´n„ Rqr›c“t®hËÆå€9©]’}EÎIò÷DÜÆ°ŽæúÀ–q£§–$qÙd÷C‰[{åç›d±zk CD=-)’\¿ðÇÉ Ûõ)xk¿Ð.¨/3Ü´Yɶýœ\Ô{hdo¬uô+åЈ[}sOnžU²Ny &zÓbh,˜Ò™@p ³W7¬E ›K]óRÒÛ¾£&ó×?Krk"Ÿ(ïëçVo/!ã•Óš“FbLŸ0–& j΋׬½‘ù2ïá>C6óK&gÆú-oÑôï=Ð]t§=¥tàæ•‰7Ò4ŠºO¡: ‡V=;E”0æ½$ëÞkìWdMœ˜‚«êt‚Þ’üYŠŠ uFŒGyÎÉ 'mfx)ï|¼â (²I½7Gúãø¼NÐ*‚íäèeDɶo¡)ôÊÁÛa¬çZ_êh€¦û®ž€ Dø™"Ú¼¡Jl¼ŠØVnÔáÀz£¬†‡@]#º¦WXk!?j\0{›Z]*)E0B]¥­¹ÙG Á|Ïî7xýÂVcípÛª\ýwÙ@¬¬g¸[a‰L’M–D2kR¼iÖz)û>9ᮬ‹‚Ú ózð@ß8’k©tÌ["çîdù"1ðø+ïÍ!n¤çòb²+‘]OüR+8Έ q+Áëj=]éù`Ý| ¶p™sÒ™BŽbGüÀx"X?xŽ(’.ä…^bŽÇ»f2NÄ™òm‹²¨ŒÍOÙè!ïÖjâÒ#Çâv.sOKFó÷K&N¶ïœ(Þ\«þ„L#ÌH±ü¡oâ”'q(–‰q”cïÿr¯H½ñ&1ÒE -œ8ÊJÞ‡çÊMT…ÃNzª£‡×N£ƒ}· X÷ÓnËpñT7àéÚÿÛªœ”˜Ð:Ü”"¬ë[•CdsëNtuÐÑëÏœíÍÄi󽻡ÊDÎ'¼ˆÖ€•U¦¹Ç6‘ (IÝÇÔñ´’+—g¬TÛE9è°‘ùd¼zvÞλÛ7È‘âyœcCå ˆ =ž3h—ìç¨óþ1°0äà-ï®p}Avc–òãYW}²Êÿàû7…ŒJä…¡Ÿ0hëiÍ=ä)LR½=-‰?eÜ„Šê“©‰{c4[o ¯Ndnè(ßß kúÕÆîû}­*—ÙÌ4SIÈAE½iL+"8õ)5ëÕGnéëñ²¢F=dT¡,ãô ЧYã±à²YìËWÂÖFT2’¼m‡û$³¯š‹ù åùFéÉS/S¨¤ãg°ˆt:ø`¸\?PDÙ„ÞœÕß2(©ÏR`O¢MOò…ÁÃò4‹=Ê\r ;ûÜŠÒ¬;¶ˆ8ûÀ®½q ½Ö“¨ H§xR}øùDs0¸µž<¡Þ ¹³¾ø×D¢6¥yÁ Õ°™Ü¢“¢[êÖÖ5eƒÐhÏgÞ&øæ%ÔÏ_Eå©Î¥Š‘$»®]ÓŽw)Pâh\Ñ£3›_Õà¶WØèµÛ“K@~2ÚøœTi”óHÑpφQRqÕD"쇙=½®¿LÅÉ¢ñàM$jMâe$ݺIàKЦøçŒ»ôJ¤u4ɤËdzqO?õ„9SŒF063ùÖ®<»ŠI£Ádðo7úó >÷x¿)l›=I§Ž_/cšsÝ"³Êj?¹ÌÓdž,8ʇ|AWß»*¶Wq,/Í]«XÃÒòúœ:û¿§Ð|f\sßì{Ì B.:;Ø_¹1³>Ûíbnc±2‘Gô®ÏõÅT ÷“&ŸB`+á’Á2Sh€ÛJËJ_Yþ>¬ioc—bŸ®Ú¹û-®É±ì!wìFC^ÜI‡/Á’‘…«:F£¦fÈÞÂC<¡¦VGˆÏŠÔ÷„YJsÕTjH’~ÇØæ…›­$ġlÞö˜tã³4Õ‹«CïnÂaÆôÉžçÊ',náœùübfàœƒ?êÏfœ{ÙN7Æ×ÏÖˆ®ðɪXœ£QÓÃÈù=®"ˆ™ñ†é˜orl¹ïÃÿÉz9¢aYÚ˜;`)Ô"`d©;™öDZÒêëÏÏ=~ ÷¾»£ÍRY¤?™¤Îà‘„?UÉFZZ!ÛPB²²ª* K£)¹˜–ÿü*HƒœhªãÒÈ›^Åñ_`”Õ?ªgôR̵òä+é²ß}¦ds”ï{‹nÉмS÷b]33âäLBB?OÃ\­ëL¿gœ·ÐÑÛ~CvÖ0ÂÿÉÚù®—œ-™Œ`œM˜ä°Ã^ãWûæÁíâ÷wów‘ÌB¬|¹ÉOìÛŠ $ÈöQ§Ê¡ŽßC®‚Œ bm#´£§ÈöKä?yÔ;ÂúŠ¥‰ïSnºƒBµê1¶÷ŽwU¼,´i?áUqO£ÛÏâÇpm¯W+8tp,ß%´K¿è¿j/Ò"$\å ×=²ôé"9¨ð3œPñS’”Œ¨¦Ò¸ J7j´àVV×úœì§ày?(c¯!ëøupòt~}]dÀèw6bq\ÖS‰¢Ó.bŒâ7ÿõF–†ˆ¢f°ì†è ¡Ò„ðù˜TZ‘‘T?rв÷žÅ‚|Û;ªŽ…Å“X‚¿7)¸úƒäLÚ‰'€£ª?rVé?ù’|•¸—`YËšj"W"i º­Aq;C!ù‰zd™'•ú|IÌÖDÇ×Ñ-ÆX|í2B˜rš3N´Wòh½ŒÅv¢(ÉÍ᯽©‰¦Úý€yåŽ16ªaKg˜È¹oü;C.¸hø]]ÖŒÌÜԘܣò(ùæä³pÜýPpÌåk„rãyíIÂÆçøã»±æß0¬Üs{–Æ]r)®1°zKß„•Ê·zT‡JÖ;\e‚v¯¾¿C–ÉGÃûÃ"¥6çÞì¿U ¹ÅšÛN ÷4£š¼è'w‹Y>«à)0… ß\â¹8åÆEë1¢ú¬Ð}EœN±´w¸cmH°Ô³6oO;¸BÄ–EQêZýˆ‹Lq±®q0öÂüø–bIø³2ØOu˜}ƒ¨=í•] t!’©àæW3´LŽòÂd{³¯&Ç8³¹tHã(ù»€Hèç/˜Y“´Z?žAøŒ‰0>Cå”κ0;ö\Þ»®5%Ñà~°1þâžò»#”Ñ‘ªz¾ÎX°*Zé¸U@ïÚb‹+³—1†»ÅàWƒõžV\¤É©7]/TÇx9¾ÉÝ g’5P³«K‚nïoA<1³Ñš Ô»ƒ¢_[6×]…óTlîË)ó/tÓ~ Þ«R£nÃŽåg)wD©($%#_½Çܼíwß “;”DÇ™¸‘x¤¡ lK¡k7“`/µlÐÿ±S5æC”üc÷e ê<ç’M½§Mò&O¨S$Ÿ2s‡'Qã> rf±àÛ°bm ë´È²Ï^F¹ï!5ð™:(¨Çä^ö×ÜêÇ &Ød´Tå%gç ö£âò¯srð"°â—N“|ü#hn¢tfˆåjêF%D½´œ`<,Ĩ´ ñL@:¿0OKG-ÌQ'よ EÖ U~Ý…g©–ÇdžËd)d˜v›’™„?T”5÷ï!›HЉ?•V‰>¬ª+ݼ@P¾•&ì‘îзçg ]Pš“`ã ÀÎù˜=޼+[Õ©èX‡›ÔÄŒÚgT«òš82(€døJ!×àÃN{h÷;=•œO쪩ç®Ò*hä+Ž´êg×d¼åqÛΆM<Ínù•‹’ÂÁn†8 U<[ _’ýÔbÑëĤí i2.ë>‚^vÒ«‘nIÜ„¤‰÷… We Ê}A´Õ÷ÖÜ|’5£_9uûjØÙ%‹xÑz°Dçñ‰!LÒ«á±Ù 3Ò@õáƒÃöÇ›?r÷'°ÛëT½ r}8™¿…¡ÈFJ‹ïŽ©•c­ÔJÂiyràÆ˜tɗφ6HlÆf]+Xç!›Å~›â/¿Ã³YO+x}‰¹(¡…Øn©/æU˜æQä¨"Ç×ȸ„ãbÌuL†Î‘9ŠUÒè‹§ýËJJ/ÈFœ¿ûÚãÍ׿Pâ«Ð+¹ –B@ãu)°gájÆ[‡øŠ‚Ü5ä"C$¯Lxad*£æ~Â÷z[gEÌÿ êk32ÙV¨ÙI%圑À&‚™AÔ¶_)X“âÍÞón| %=²µÐk–Ö¢’Áö¿êz«¦¯-$cpKTàoø0˜­š7§>^=XÉ%|˜»øì×ÛÅLs Z*]Â]›âòB ¬*â<ìÝ&õð¬Á$Éäò(\îhÐP’6õ5‹ÅÎeÍ;ñh²HÝÍs™'uèGOËh΢×ûtÓÑò#‹^-Ïç 4¤ÂµöÄ£qsbuhºË5wá¿™ú,¥Úb‡|éù=†–/>üª£/öPpêé!GWÄàrÒ„ª+ D:áʧBÂÖ«’wìMÐ|ý.¨W­ìÚDÁy¸hÉnŠ\-·ÊeÏY™_Ì—‘ÃËv†@©û1!ã`Û|™ž5*ÊMQší¯=‚Lwð[²"Jí{sñ,ó–Qcˆ$¾ë'L†¨rf´5¸^À ”ú,ô¸Ò>ŸN 8ÑcbŠ­Ê†éÜlW¬?ìF}ÔQD OBÒ«BÉÃ4ñMö‹Øø,É.·vоÍöø|‡ñùÈñHJx«ÛУtÌ)z‚l–*rl95%Á”Aà¬Y®iŠ…› Ù”ž /¡¬oÎ'«uðU¡õ”Šs.Žõ]-ÅMˆŒãBRF·4B ÌËÉ%ï=±ðʈˆ8|»ÞòCý“\€óë5×ÑÞ–œ) ) ìï™k¶ô³Ú}’C4¥û’8ÀCœîýÄQ~þ™Xƒß3­ìvްUa±¸<,UH!bí´Œ[R_0yÆŽ¾`gR¬úVÈ5khj̉¿ÑL¿÷ûÀ¢k;±Ôû=ð+õ`ôŸ¾À¾Ô/¿?VÖhE‰©•FiÏ›¤N=Z”| Ac%¶çf+vºP{I¿¹÷Ðþöÿ®l¸µ4Ž îcÐ5Mò ¨fÃóïI/aÙ‘ÝóM¨ÜÇpª®…«•O»â#!LÏóŒÑ&#†›,pâïŽZìÓn=Þ5||vͲ›„굩€„H&éq—–ªÑØ"n·aôö7|ÞQ´Û_ÖD?ŒUò¹¥fa}ÜRÐBI'ÇmW +i1|ÚrCÁœ¯%ˆ°ùæm;x0“è‰O¼³ôŸ$!o=¬ —þ@´UGR&¯ô@©6Ø«šW˜AbªøùKõ¤1ý«Z÷|ÈÅÏjR«dq¡¼¿hTň–Q’"Ä”䙪CR…~°EŽUMÆ[ð¦aò-Ó©ä©™¯¹å€ øô«.WÃn@ø¤ÏÂïé0÷¸ÛÎpè¢Ö¹?¹ôñS.-èê—ƒO??Ó›îpåšðýÁºZêVjhÔY©ä’ˆàÇYÖ d“” Mccã-v1<ŒU7ç©°hHãw g=ê|Ç¡ÏÝŒ¥S£)mJ*Q7ÑkËŽ¾¦&Ó¬ÇúõÄߨ‘Í„ˆŠiè¥Y5F~†Ê‚®ª%åœÄ1µ¬Ä“U‹œŒt¦uнw¶Sc5°Â¶¿®üÃĤ ·@þük’AÒ‰ŽúL?Ç!ns¬1íÚʤ¯7vÒo%ñè{7Xíù™oµ)n6¥¾\qÅ©ž¼¼Ûº^ðy ²6hEËÓ5wc(¾÷òÎÚ»šR¸ØÅ9âªY=ì/f4cdå¨ñÁ Ÿ•Þäfõp ”ÙMÏêìD°T.©VÛ6£X)—ž%Šé*TqŸ“×bð¥H€_è& ?fj+òàOD+Û{z<~'$pÔÕ+Þ^Ks¢ì´–â8…ú„ðÝ^UqZ°7¿ý“(Úø;óHÀé¹N°ÆB…w°ûÂñþÞ§‹yƒÖnL­¦ž½¼0>À+pvV±hÈD/"yÐbBÖ2ßT¸âÕ¦W¬pôfˆNû|“?¬&Ó¿ê =c/ÈÓ›Kƒ“ž=>o ›w8uÁ…£8¸tb‰EKct¡+ ¦¢Ø íÜ)^‰ äØù0Öe´Ø‚=Yæ ­5[ãö'e.áZ6¯2!´' ‚ĸ¾O2ºïlHùͯ-©¿~º«ª¯W¤ß}Oç…!ã¨÷cþÂû²Ú†¨lƒ‹¯FÛly8©bø–˹ ½2Z¿ª”ðË K+‹Ça’I Æ´ÄKçœ,©ˆ¾<ãÛ‘8ïZä¢o£µ´?¸~Q³oT“Î¥( ¯myáS“–hÜdzÁ…]Äh¿ürQÃCúÅ› 2åî‚N¦Ëo¼îfv¢pN;a.ÖKã}‹z[ÇDÂ>róIT§§k­˜Ò :C?’¼ø ç×ÓÕ‹5Ýš²É"†ÀàúàÚ«¡__ñ]™€´X=ðÓ³ú@“ü unÃ1Z‡7“—(†ìcXðxö¢<ÇÇÚÆçr})”Àæ¾U—~°VÜv¥Pä;-g˜þE"ÉŽÛKN%µ`ø ¯ZGf—Fé¤ÞðÂ"Gc­»rƤùœVWÌ›¯8ºRÕ‚Æþ,ЏÛMUdc+æ©ø¨Öiü ÷(oÜcÎóÍóåD,gaô|™3 /MÐ4 4/ç/cOèßOx‚åÇ‹f`½švTCÖᢋH#ǯ4:I‡ÌÓ]Æ Ì£–ƒ½KRßúZPL\úÒ„ù5V¾¶‘R]‰ÍªaÎM–cÐe4CGôXålØWš*{ùWg+RAöÙä³–mÆzž‚UßÔ¦"8r| ŽZþ¨œ<0_Æ ìOýø QJSŒ—ZP*§H•KЍwHçéx…ì'ˆ¡xòná(ܵ}ƒ¼ÛÄ? ˆ¯ôØJûqË>)#`Ò{M ð& Àе»¨ÿ ½Ós´gë'¬ 3@ Ö×öX„½“ôI#ÓÍØöíQk¼ ’ 9ØiªпDêTþ¥†äfñ×¥žKÏÐR Ÿ|ÙŽ :o{”jEK1ѩƳ*ë3ÜjQ%>Ná ÙÄ«/°l>%«Aà ^%ÕŽˆºÅV»á,BPã®,²ê±ÍÛj48.µD û³/1R0ª ¦J/tÊ“P5¹ÿG[¾»\çoä0¬”%±§2¡[C©-K< ­RÏ–b3`T`É»>à7´©ê×#Mì"—øî°½ôÝ|"‚{wgÄœ¬ˆ{<3µÍý#\"ˆe]œaþí¯!Ï.g5¹R#Ù Zb›g2 v»<Šöùu͈jØrÊ¡ÞÞn I9œº`ÖDxyËõ7•ÆÎ½áyOS¡zDsä2!5Añ»‹¸ŒÙª7(&_|`øª¦ê:\ønïkÚ ˆYÛ)4÷zÖ„S€„T¡ü$é*næE¦wæDˆÝ|iyƒ€ATvgiÎÖ-ŒbŠOwµŽ$ ôÓU%-ß-Ü;䢵OòX’“B/–Óè‡f˜àø'B­`ƒŒÚ-!µÛ"ÝûÅá¶0‡–ïXÚs«7œ*àžÂªÆQ[¨æwÀ!âg!;Ìä#4:¦îÉ›‹M ±0$È8;Ö_m†b’Èï-y„â ¦E¥°j?Ó1£¨ªb¦2h X•Ø4˧’Lѵ/ÄF‡ù ²µ@™P&÷¼þÀ®È›ìÇ/6ÚÉdµû²¢Ãõ3[Èz /Pb‚¨mõPmÆ7[¯|9Ô›À‹ä…ô7RkËWn¡šß1sþÇŸù|ïL)¤G°$llBõÏR:œ¤Ñ”w7‡¥ª›ÍÈ]}5%£¶mld«¡² `"ÓrœIáoÝ*O1Œ>ÓŠîSÕóÔÿXzWS'ºZmÔ1;®ã%¦Ämú¡ì€Gâvx)ßÍ׬ØXqØëí:’‘éÀ¸ƒK™Õì'˜Ó!1í0v|ŒÀ4x+ydºuÉ)&ø. ”a>/nÀOöH{Ëar+ìšÛ¯¡<­ºû9À=°\/ÝT1ëö[Ý(Ñ[~æ@}]Ùâ,ÊðjÅØÂ®É„2½òÆú‡SýŠ+ÁȺ¦žWíf÷IJ5Åq¡ç˜(¸¹V ‰8„|ð|h•G+gðr·‘õ¥úµÄ½“«ºƒÅõÆ—bYÀlÎÒ¶OŸÆ ªˆÝâPß ‚ukJ99-±¤÷E.%~ Ž‘ŽHÖz¯—ÏívÞiì$$Al꾆O®Û¢Â%BÚí¸}hOפÑgVù}]Bñ³ö¶ KíÀÛ»–1ÿ6 –˜y’1`o->ÁV¤ Ü›n-þÝ » ;}öZ¥yÖ•Œ!V¸û˜ØÉ0§{^8÷äù-ÆÖBqи;/pMYŒë€íÖ¸vØ‚Ì<1(ýs}ͽ¸òœ=’>C:]ïfgdE¹m ãön«¦qñMšÞÍM­¡™Ó”N#Ð3,òp|)§¼^C_WëŽh£,s9W¬ï‡ìE+ðßQY›²}¨Å;׋¬ê–æÐ#écõ½ÓÏz‚u7Ïwã…³ãP¯q]»2Mþôd›RY/’Æ'X{TDØEŠƒíðÊ¥‰;Yò.E®ú>e û1#®i§/ÒX<ÌÐÉþ’)ùyWíËq³¿ÇLXÆD.ê" 7\«4±ÐšïÃa‚£ùÐ ôq(œj}¯Ï4ö·Ú>«/«ˆO)S/õ(Jq¦k,N#η&.†£Jß=Å–öbp7±K6֨Ʌ1Ö!n6߉¦+Ãôo#í_‡.®í£·ÐcR}%Ñ TÎøgø†%L’é¹BiG/>¾ÿŒ÷ã, ŒŸfmo /'R&;¥$æBð,Nµü4§:ŽgÂ6GøžEŠW‹Y̱¹¼?¼E ï"Øïq ûdú®§@è¡!¿D»18*r¾¯Ñ…M†rw`âÏp ÎX O1Ýr³O%ÐŒ!áž¾±7˜ÙP#q­1ÙØ¼‡Ñ  Ëkn½žŸÅχ¸´Ü葨ɂ>#3 )ô~m¿A<;/Ìj÷ÃîNN>±‚™¯àÝjI‘Ç8RWôvE>’UÛŠ.g¼db+SiEÜ!“+ëä‘.ÛŒÕm—ÍVvÝšð!ƒFG¶±.ÚýÛ>›+³ºR ¬ùkäû}ÀÆ‚ÎJñ^\–p®­G†–éçîà FQ-×ÄŽACšT&& #"+óGm`þO_' ‰­.Ôg+ô¼ò§“ímhÜ BŒ‹©4Öݤ²lÿ`ÀÔÝ‚xÞLª|«í]0¼û£2lc`Ù›{‘ù¼¶ Éæ¦ÊüTB'uù³eÌÙ^7ÁáÛöÎ#[†9 ¿µºñä.JÍè3›®° ¨Æ•¾RKƺ”yñD?tåû¦ÛÉû¶65[¿ÊÅÔQ¯=JXæD1S»4߆ȶhÝ—øá·$y©k[×jãò—Åd_®æ…OŸwîÐ K÷¦ã°TFÄÞ7ÿ¹/}3Ñ+Ì6`[¤§ n.koŒ|\Ìî”AWÐ?Þ8ʰ¹ñÝ,Kxôoó9µj¬ï9øÌT¿ñk@`Ãvf·BDäŠâ¼,‰ÚÔßüNü¹»Íˆ¿áAûéæÝ‚YäÙÄ ºOÂu ßU ö™^Ùv©aacäÙº3Ê~Ĺ/(¦gQj²CÆ>üþnÂy¢ü;¦ìÝ9Žá[D÷ƒyÈnç-i@j^Š¿Ï !ñÒ ª©Q9KVkŠ:—¤•“Þã"ÙH1ÕÄ'À¿ù¶â»Z)gqzKwøëÃiFÆ´Ç9YÏOâyÉúöÏ+ÕT–»°_¼ò])ceŠ:¯¹†c©}Lø·Êe,G‚§ůuÅ쑈¾ê=ÐõyËð—ˆ9-ÛQWyWÿê;+\_D³È¾›ÏêïØ{ï§Ê&µ9ÂÌÒá„›ßì„p©Zðþj.€u"½Ä{eô]Åfã«ÈC5.è,©@]½Æ-3}êÓ—é™w&¦qåç¨å"C_…WC•IcïM5r§#>`KõR+)ø$WÓHzÔ–Áæ~…g`8u‹g'Ç7Ö¹>!´I˜Õý #õÕe>þ¡?aBváU;™-WrV|¨JOÄ÷i„îCûÎÝFV"ÞP:íð¤ERåÄÛ¥Sq®‡‚Þ„!ñ–”tY'>”ß‹uÙ¹ÚËr„Úä“§ñ÷nçÚªÛˆ²Ö“­W<ÔäN•_rV„.¢^¨‰O[ã-D¸;[­W©àþ(wu)ÎÁAšê‚ˆƒKc öFüS<“v/"y’9H×pô>@D9—R“ ¬ÕY“¡5œÑzm†WÇ™e<>~ó¶O´©/ ˆç×Å ÒEž Af3á5UòË‹Žºý0ø€h)9ÿŠÑÅ®ÛÍcûzr9Bu-çg ÚHÛ?!%'éP5šp­ÁP©Ã Ùn/ø7G‘‘"Ù_?ñêÖ4KÃÓåS¼Ù,ÁDÝX˜eÉŒoñe#Ø“ëûÖtÌkÙ(‡¶eP–oºÅó3%¼§’/„*áÞ¥t_j „ï~¨G0™¿ ÖþëBxìRofí‚…Ñp7%ãÿBEŠ‹ endstream endobj 187 0 obj << /Length1 1144 /Length2 11183 /Length3 0 /Length 11949 /Filter /FlateDecode >> stream xÚuveT]Kº-î @ðàîîîî®{www÷àÁÝ-8 îÜÝ—súu÷»Ý÷õ£ªæüêÓYc,ò¯JªôÂ; „­3=3±ÈÆÄÅIÕØVŽ^hîBüd7F 'W9[ÿ‹þCˆ:Av¶bÆÎx5 bycGb&bf&&.væ?{&ÖÚ9ò+9‚lì<‰•€Î@GkíJÌÎÔÅhë¬êboo T€Nv.ަ@'b³?™ýwTbQ;{G¹…31•ºŠ&5--Ý¿fnnnb2Äb@'¹-1ÅŸ+ÐÚÎþ¯H\HmŽ’üe«df,9ÿU.1•…³³=#£½™1ðÆàdÆ` tf¤þ“¨¸-@ÔÎæ/NõL ä4ýS”ãöÍÊÖÎÍÖë¿`3-àï’.öŒê¶  ´Øÿ5þ!ü3:³3±0q3±ˆî¦Œ…Tó°þM2ÿÛ|¼ìíì‰ÍŒ­€> 3àŸÁËÉØHììèôñú‰ÿyB`f&€L‰M€æÆðoï` Ù?ÎòÆÎŽ wb]&&&fb¦¿¾íôÿ `gkíñosc 1£’Š”º’$íÖþ/+»?.é™9ÙˆéY¸Øÿ(åGnvÖÿô¨d ú¿1ýû²´­™1÷?ÿÓ±&ï ttú£Bbª¿KMü?=)Ø9ƒLÄTÿ‰;Ó}üY˜ÿWñüþ•ÐÆp±¶þ»~ªNü§r'b9â¿j·6vü/scµÇÿrá? 5ÿÐùÿÇ´³±5ÈTØÖÜú_m9I€Ü%³©Å?„ñ\Ýð÷‹*Ù9þz³ÄôÌìÌÿÁ©Y€L­lNNÔ÷7´üGHq[S;ÈÖœXÕùþŒÿþ¢M]ÿ´çïý¹ûϳèO‚@ ;ÐayÁΔ7ز>¸ã±VÏ~o‚µŸCýþÃ…ˆ !Æ|‡¢OǪ -ÿŽ+%[LiÌB ZR<4O<†ÓÍŠ[¤“#B*÷”¡OéŽjꊩ7!'-÷HÔcPêâkŽ6¹€è8ºj¨Ýg?‚GƒCE<ŠïUðŠ‡ ÔÜXÏçŠRÖ¾Ê<0s#]bL–aiˆ2ÝÍÓO”2:ˆÍ§UèFó "Èì~s¡’Îõ—&xÚeœ<]ãÝ,ϲB]à=tE‘y”7Œ¿ß7Ghæ`p’Ö‘Ppp&Øålx—Máð2ç :§©F¸–è…mNLjÜH"7<ËròHq\ä`%7·W[±Œ-v.ٙݘëGav´ö–V5ìýžÁ!×ÎfÉ-\ÈwÑh„ò몎ÏN„#:Î!8˜T½0¸6 €¦Sª¸ðZÄÝy­âà¶“+ìØ Êÿ’\T°]h¬”E¬ôˆÐÉGz´Y›üÊqa>P}ºèä¢ ¨¿éC°½×Å'sé/¥8?Ós,çÓyR) ¦Ð’ÌãoÀ‰ð~t0…¨ fZRj"b !Wó¤$æ·£_"T7›üÔJæ×͉ýó¢Ã!‘ (À k’pØÞ«úü8¬+4“ÉãƒüñøÏh"¢†ë2?ËÞ¹¢×²ÉÜz–š¤ó+üR€Ô ¬K|ûÝåÒð`#fO·Ž4 `+TBc~Wß K`QÎa-Hq#7f؈:³>™’™Ð†mäoιx‚>ÌX‚ ë¡c€V&Œk™ÑX:õæÝS‹„P ~ <±!p{À2.ìÒ#¢Í#bÎY³ ‚A×Nrr½€ÉÜ’1Ö*È…«“èÆÐŽÃÄžý¹¡­nÒóÑÍ“û<ÑRùº­…ÿ Š!'¬)í øð]a­–½Ã*`ÖRÊ‘y·íëÇ3ZóÉ8̪Í2GbL±ÄŽ_>È^Øäææ¾iz—ºò¦š,®Õþbz{=®GSƒ'‚—¬“¿/ž8§ë²ã×”nI—vP°v¢Aã/LRÃØ•I-5Ï“ªeE!+|›”+å²Ä èð¹F^*ôX}VŠAMù­Ó[†OÏò”†ãÜ`Õ¿'²K“f•Æ•x²”D#´¯ÁpJß^Àb=FÒÚÚ/LVa'oÁ²±Í®]tÛ¡ìßÞf JH~PÕ±v<’ì<@ió,÷W 8uÇ7‘œc–èxÖ‡fƒ­'p÷»U×âlx·¥,Ç׳ŸÚEË™×øª¾*…–l%Îe&ÒƒQV8;xÁäL]Ö®–³‘ãG&WÌÀü¨†ea>+.òÜ]#m.'è#X6ŽÛö¡ÀXÔÁ+¶eFã×ëÓm…6GÝZÊÆ#h„1ÿþ2DÊo=çÌ×^–£E_íaÐÁQŒ×ÂäZLœlÖ²éË…‰QeT‹-}ŒÜ¸Ãñ(=ß×—¼qãÕÖ΍©óœ%>¦õSëg›ÄfwŽ"Rpõñª’ÍI;ûNùÙ|ÛÈ@b/?ï÷â( †ÐÓUsÄã ´pñî‚ÏfÚ{þü®[ƒˆšg&.áuáYâI.×ÃÚq2—{{kÜ|”ãÚ®øÊq÷K‡;¾»œ$ø’všhE7v0Jú±÷˜Š¤R>òÃãÊÙ ³rÕn˜_¼m9l#Ò’/ ’ÅïTõê–ƒŠÞgÙÎw¤#0–ÇÝšÚTÎà` å›E-[xg•6’à—%{ºR¨ŠžÿÝ¢p¼—¨C “â7×[¨ÒhJ*t†Sd‘ô¦MêlaþdðÙV TŸ-žßOOÚÀzÅ‚…’n‚Yî… /êò;êÕ½ÛpÊç>g+‰ £ü­_iJ« ZL1S65ͦï-þ4•–ßåö©µøÒ£ÉC~LƒçEâˆ:ƒ±¤ÊÂG˜_ÅZ °pjã_tƒ–³ÙsUê8•ìXÖûÈvfĉm`Ã1•û¾ˆÑÂD}»y»è=õý¸ 5‡•Õ€´t½+k Ô¸j×.ÿ†,dòP*§>”dÞùIIwíG]IâÇþ{ú¸l•lå˜Æí^*bR#d 2–¢—Ç?3ûºyà«´?Âð3DšÐ€:ïÛ+žŒkÉø­÷YÄQOÍé§àÊÐi [8}žÍè¢wÿ—q¼Q% <^S:q °&±XÖM=ã(˜»ÝñGÄ!ÿdñÄÂ’ôéÙõ$X8°‰ &äú¸Çpφc#(5ÚôU…HZ0eiá¡·¹Í{Å”ÈÕ×(oàc©´±1qÒ~[M?ä ‡üß]|ËÿäÒ);–&õæÂ§ÚAwÙ¿ÿú%(5kQ$¯Ó\OëcUwA›:r.YÄøTã‹ï…=dj#é2Üún†Ò†•wœ¢¹"„çØ“']ZˤWM:ë°¶BlŸÅ…jI‡ÍÀR×lÒ±.éˆïŽÁ¯@5òKìl‡ü0”À—VÏÜx:ÛÐÇßÙ—¯¾¦óGdÕký ´" I¾Î’,;OÁ±°†ÍRèTõ?$€þÂìó8鄟 l"iewny?Bê¼ãíæ¸Ã¼ ÿ„<‘y Á‘RNMzs‚D^­"èw@›€§cNJåÐ6йâŒNç×È\Ÿ>}Áj~EyhVkì>ñˆw?‹zK`¿¢Ís ©¯ãuöÒ)`L]øžuŸœcµÈ“’èrGOÝëA'Öc|¡ø 7@À€âÓxýÆ еiA»‚FGUUJ2#Ư—ä»Ju´kÞäeÞg'ÉD:Ë©%gùšQÕ«n,‡ øøLSYéÛ¢ç ‡Ù¼ïñ ë{“$re«‘g&•ß•0ÕB±«×!êT—Âîe Z—2. §ýkÅK¤t+QÄz;ä'ép¿B.̾Ú&`»ì…‡R LÚ6øÍ ÓW.zûŒ“’vrØ 3m1&zãæ–ØC,ÜôiVÿ« µú¥²º¬Ìö¢¥+}àÉÇœ'‘„‡Õ‘÷!Ü +-Jb†QÓe•C“Ìu‹á<=á:61sW93ºÞ«çˆdæîû­F½Ë~…ú{ŒR‘Pä:™£7†L}öÄD·ydG·ÅÁUwa"ïR~ Ãð#òÙOýÀ“SùÏ=ïw„û„‰ý‘8¡’\´[-¸Ám _’WãsMuÀï"¦Ü)ÈjDlƒRŸÙ ›Ï€:šCP‰ÁÂ;¶Eëaóëì'._ã ¨/8<ïÊh:ïya4ä*b¼(¬D>Ku]:˜\ÞÜì¢y>K-nB-Ó;¿ûb-.éH>9²®K2ïø¾?¼usŽ´ÿÖµUo}ø–» XÛG…8kÊÛaï‚¡æa3Ë{5=¸–UŠˆ ã¶á3 škùmÇÿZ« žÛŠ©Û{®F;âe§d4˜"Ÿõ èc œìp1B5ßxúNÍÓ¬>ì¢A_Ù¤öSÏ4L-ËmÆ*’ä>ïõcÑݶL>Ì+‡±áŠz*A±ºQ¸Á`!õxÈ6#´)ÊF¸vÚ8–ˆl)ñys¼ÿÓËFs¿^ºª—¥¨£º6h+G“Æ.Øš¤ˆ@ÕïD†ƒ‚èÄ[QÌÔ÷ºöÚði2¬I\œ´¦˜ÿ®5ñf6Ö~G–¢áü¡_GÅñ…[ˆæHibî¼3Èì|‹Ý®mr6¨Sà•Á[R&3ž!â ?‰'–EtŸË=V÷·ïNë¡}OÞ™#Î Þàts o¼°ì¤0ìvîUb¦ú‚+¢œrJ‡…¡t >sÌ= ™ ÌÒ‡È[RC«ÈƒÒ”¼R"¯•W-%-/¾æmÂ/^|¯òº %¿FáÆªðò;ŒFWeë‚“áæ9ü½¯,ˆ*´qðËä#ë%Õ]6¿a×ÑeØÄõ ´/ï~FŽ‹ú FÛJî”Úix9 ¬RÔ21½í¦B<­ ãhÆ/æõoõgÕóCRKÛçÄCA®_{— :Ð5K2Né¹â –EÏ_K-¿Ìn¤Ú tXçø&=÷ŒÓ zŒxÞfeè&ú»†9H9]ê?/%À§LK¦×JCÔø¥bùf­åÔ‘x´®zÞõÏŸÉùPåAL_ÞŸ©$Ï:‹u>aôBý†¤ýË}´zmcb×gÖÝd騅"Ñ(h”nWsK;±Ü^»>sæjǸñb« s«È#Î’¦€Zˆ¹0¯±~͵!Ám Kî<”Ú+S¸âê ËQœè"&‚@iÂNÔT[ïVÒӫ«¿Ø‹TG!ì?±Ï<‚êtx,$¦“ŠeNIúü!¤BÆB± `„P~RSI0Ï*3Q~ â ~•¢ð$åkïŸ|Ji½dI¶é¾Œ‰~/÷—¹üÚy­È•–áÒ¤®C>‘úKuÚ¦ËÛ§Ð>\.u&¶"€=œ_ºDüýmcíò³>5r\Hõk¨úo ‡k¹ ÓòYÈ‹K¦;Žà˜@ÀoépÝBy©ø(Kñù*ÿ'S#NHÖ_¢=fã㊥¹7?Ú~* ¡­:KâÞŠ(ÈeØžmÅô~4·IG¥Ñrz脞±Ú&Ë=aEÚ#ûú4&SJÛ>& ˆTDH×!‡@á¶“ß)Ãmþ¾ Y£¾š·@Z…Mîƒõvå8¤µ>~Vß3gíÑîºÌì©2çläz)‹-» …Ò˜`¯ùºËÐzOpÊo80¬* ÒËQ¥´v6zj˜öõÌÈw#KuU(*pwÜ9ê0²¢…É ÕCµ Ï¿Ê÷,>æµÖ4æQkzë§ÕÄS.𩼰&CÙÖ¨b„ÖúÑa%y¢å¾‚6ßÙzx–Öñ´z™¸gò¨xõݬX×à¬ü,_C&=ªüskš­Ö¸H=Ïìœæ¿–ïýÀ¤ÚxG)•–þÑZ}ñšš–óº*…Îévl¡UµÛXéÐ0Э0:ùy½½ýÉ>û®WãêßêXh·r˜aF…™OMðûAÝ:ž·1/îߊB¯„Aê4÷wç¯ä¼Æñ%«å¯[KÀ×¾-T|‚{‡JL°pT{ÄÜŦÎñM¡Û ÓAþÚaè!M;܇2WÑ£ÆR(JibˆœP_“Œ†K3Ç-q¦o> "¢¥S̈üésaQr—…VQ ŠH>t:ãåÙïø.A߼øÇT÷šÎêBFo}ÅÒ”ÊQ  Ežä‘”Ö €¨I?Ñðž¶¥ûâó é+{8*‰j'ǯçàZeå5ªÐ•p-‚Li‡ ãÜI@þl÷ðÅõ¾² ~ò/Ò4A°=›„¨÷¹Û±ôÅ£dYJ?!íì×(ìÐÜ`é/ÇZ*à®e‘E@š­·_ÙjÓŒ%x2EÆt1ÁZ>»`<Çx|Bü 4Âé (nvX¥ÔŒc’ùp\nê9Ʀ ê™™b7[òípN\m{«[îÏà2@ŸP *{ѲHæfrÉÆ¸ éýw(#Ò_hG鉟ÂrPº§sóQÛàzîÒ—;¹®FÃ#A‡iW÷§ßå¥~åÞ˜:µ†úk•IÑånWÂcù"7—„ۼ˥¤z;±ß|p:°2ó©k8>Ã%^:H\ç$ºÌ[Ù—Ï’®÷ôà4䜢EÔR} {ëÔ‹ÑfB5ø²E`Ž?¨—Úà Á­iI~Òp4¼'žÏWÝçÐÎ!†WZ/mÚìáé¨Å¨Òö¸µA²¹($À+Ìò5¬ø †‚^ô‚¥À†ÊgIx”™8¿HP±|CI–+FL±¸ “½sа•™ªžÃÁxö ºõ :˜ñ©]LWßc‹Çä}ènÔ³ár8DUQ&ÛZÛ<§µº®Ëü ÂB¸N°ûh>Üt%MʦSu ­7E4Üäž8}Ägd>5žÍü”ÎâáWúεoãqsle¤Vm؄̰{ËÇîݹÇIdÝžH¸n°ÀE”˶ÓKbô)£fñùâeúõ}‡wy % -BoŽg•àçKj×#M—¡·ßøÌ—R<çVaø^V_²¼Èl’çWsÝéXì ÌXÓ­œS»¿8}>ŒÒ×^.cBtæ×Tº2qSп…Ó¹0b ‚` œ· >ä­ÕA‹(§c4…Sšú×îEÝÈÀ³\Êy2fV‡^¥sgj’UKÈ/tB¤¿“û €Jòßa˜•Sõs»IƒÁ_Ý÷ÇüÝzÚ- 8Ò—–¹1hpŽÏ!úú¼vü¦ØŒ–Uw¸îÛ©ÔîvRbG z½§:æ +è/Ù”X_9\.Ÿ\yß±ÀÄÈ!=ªl‚éG{ê(Oå§ÙAU$’4)¥å¨߯ÊúLû´!F¬¶›¶õ_Û-?O94 h7BaT^õG³^~jaY×uHš¹¡ŸãðYCžÉÙOƒ³?²nîµÌÞœyH3ÇcÁAfÜN-Ø‹4÷ VF_XCoX4‚©^ ×G$‘B¼×›);ò ß`nÓLhí¹"‡Æ\Ȫ,iDbûDhXÔBCÞ:4s3•¢44£_*û]Xü&‡ÍSó¢çMÐÝýÙc¦¯…”©óˆÞ~¯Ðš?­‘%#›c0º~*>ßýyÜìiɱÈÕáÒÒºÈ{½^˜Á3¼¡'ætèÔï×3NBS)ÙÞUTMˆGÜÑ®ö0‰ ô^󜃃iÚ„!µ^!h{®$M­¾Q¸Â$ºùÇ–”e)nЈËZ?Wã÷~õÁQ¤ G€ÃÒ³æç}™CÀŽ–=*Ô:¨?l©k§pÛ¬"Åê†úTÅÐïk_èÐ>Q_+9RYÒüŠî–È(Ò§Œ»•íMvÕ1t¨EˆÞ×#oM£ÉÃ+¼¦i{”(‘sØ×ðؽaú„µtЏ4ÚB«¯®ã(£Í‡Œè5²#®¤F»”dj‹>ÉæáÊ$(Îq+ïÊørÖ6GÇ«úkê…¡ÚÏ¡ M ¤»‚ í0×übS޲s«$f5k|•Ã+p˜w™oÃ|-Ķ:%* °„›·4Ò[§a-nÖпoÍoˆ7 ~Ÿ}¦3¨õ©ÃËDÓ¯íú••NA ¯Ép¢%S1WY>s^’9ª¯ÚÛ‰Q•ùµ9×Aî[õMžt•^øk™èŠë9{¬ý ¼Bj0|a+JÉH¹ žÜ~úaVŽá&yÐsž×±“#„•=[¿ ß‘\æPwbÂ{,0îX**O2o±²pÏR»Qè^64ÄÉ?Fô5‚VçñYf ß[ôm>Èýy²ÉÒ`þ}ª!2 Y…mÈì|ÏSØK[o¶j?óƒi*ðqµ´z ¤;Èð ² œŒ.¦opÂÍþHï•7Ûeì¾ ®/5ö´jõ$ãá¶ÀÛª"º:³§+mÜÂYµ$¡dx+€¾è‡¾ ÆìDïÀuÜ Ü:–_OÍï… <”u³sÑWC N1o®‘`-´(°Àù‰ž­¯_fÕ¹íGFº*iûžc˜x@JF/?ç û‰¸˜Î0ÇwŠÛk^s? Øð;´xy|…–ÇÈr· bιÃy,A<Iþm݇PBÏ7ƒ5º}#/„›Ÿ3ß.ئ¬Cµõïý€+ŠN…’ðÃQÝv„±â³xÀQôj¹Ö_"ȽSã+˜$Q< z6?_áNw«K€~W)²éœd.:äo!U­|Æ$í»ýî¹ò¾Z^GieÀL(+Jš†z‡CL^æW­”‚éÖWz1²Ùô ÷ü6ýTã}Ro´8)ꩊR‡¶B 3»™Mùb·C• F®Ý+—NAÀîÃ;õÀg?AÛeL`(œÂ,˶õJHÓ´„?ÊÝ„¥Ò''ˆ3ðÆ; ™?Ï<… ϵ§ð…U²BtyÇ¿ÌAˆ2Iä€]¥.Aµ …®d‹ß,*d¢Wù1²QYüC¦§TØç%’î›ÀÕ!/0mW¥šÖÃ>¥T×URæÿïµ’w8q7FqÐrfaçáÖsæ1é@úè`×žÖØ÷ÎtôÖ‚£ è/®1¤;&|ekKípiW°«úiÎ?èÛÇá%>yæ1b+"ÔÓ¯;匷ØùóÅS×ë‹ÙöµMð: R ‘ÿ~jÙB­é§»©Ó­V!X°ÎÄ7á[´˜/‘Pà«c½Ì=pTþŽU¯W s;:‡æÐ%|žÐ­E²™šËÌ/ƒ²¿°Ô`Ïg»Øœ4|søv“âÕÛeª~<ßí&L‹ðûûã·f;œ`ÖöZt}kUùCÂ42åô>”³{MXè´X¿Õí²û‚‹C(£°MÒÇoüx3 ›ú&)ß2=Îf×ÒDb‘T*Th/ï~êÚc˜36µï†¹-£!N¸¼›ú½`p ¾·qö®›{U‡–úÚ“H‹1eæù2œUãYáä¬ì­ý£¦ïÕKêAÑn4™‘€^;5ö\1ð5ÙLêÕp|< â~‡™+ÌæÑ&äëÜǃº6¦…”ñ£ ‘˜K4dR¥=ÃA>^8ß!_ëÉò-©.€›;›ˆ‡Æ ›› C!Lbãég˜`àjR DßÙYÊ[Ù[Ôå'ÖÓ'ûEj[#ËFÃläd§—£[vZâ™û#ßïÙ¼™FmÏÞe¼´šar8_×ïd›œzóS{Ù9sJ£[÷“zËùMPˆ 6G à)nUÓraÈèÄÍV®þ;aÉñŒ_ñ‘'‚XCZ¶ªú=ò ž§·Ë=œFeï]ÃʸÕs7îTâ:i]å™@ãBzJ2"À¾ŸÜ  ‘°9ŠrE|i.Å ú`éç 1¸Yø»„4Et·1»[ÃwàhŒ¹ôÁP‰‡@”ÒªjÌ»$ܶ&k ×U8&%õ÷J Q›þ¤š/Å7ê×$®s—[ì ¸ÿ25ÛIO·]ò”×> M-éZiTÀÑîi"6~—¹~(ÐÊämâ#þbÛ+·®¸YF“*uV§|IÖŽz7% ÃÅÞçŠZ±©FÀO:@qtÛšq4ÍhA½7¹œwøÅþJL}•$PiøF'Ä“†jšS¿7 ­ËcÕ¾ºëqV²G¿y~—s&›Û8•K¯FÓéâH lÀ#°óLûf åK nHÐùËl4­_ƒá*ï,ê¥)ý»|œ$ËõǤEÈCýiÔD×Ú l+Š»onQ¯Dˆ¹½‹ãOÙS÷ËœÀ²VyHJ—¬/$wµî%êKïç6[³sõkÜóÙ’Ø]}OÐFvf|=oÕRÈÈ!UìG'ˆñ6Ÿ ¦”gÃËnOkøm¿†ÎÙwo²šÑÆF¥„ãLña8¦A”¥F2qÚÑ™:¢äªIü°£Ûdƒ Ê”,¾X-&BƒÉÚÇLs•Cɤ.J<¬¿bŠ€›.›H㈦ 3)ucYö°Mø)?jK¨³!„ÖÂ~Nm´Ü çJÄ_…W]Èø­ï¯ÆR2ƒI…&@¿ïô©–ë_ô¼™È¸; ]®ç×ôî«MÄdóìF¤DglZ>^¢³ã‹‚…yIåS`>·K)8cŸ>û”}ÊU°+}ÇÀd!2íX e„!¥'}J×joK‘Pÿð6 Ëe}i‘cDžÏë[»­ £(ÊÚ°ÔóîK×S²Ú~[À÷i||»Î¶†hæèØœÄÁ0¶„gr mnzd®¶hK¡.>_Pìa …zÈœŸ¬–ú–{#íj§3þZá{òŒ7@;|n¼Æž‡UæÍÆlÁ2wQ)è©E\âŸÛ`™»Ór]E9ƒ·ÓuÁ¬ù#¤l¶©U¨ˆÍ­™ƒWìZµPñוXZ“$A–»1­•¢BèþüQç°j_žPFSä>™‘V´Ïœ¬Tƒ7ùaˆ]5WòX¸FÓÔ»¸ ãwªK¨ ”ê§àä„'Lo6ĆÖkH»žkÇ„ø›̼NY²Ñ„ŒãÌÖE¡h©Á‘lÏÖK|³ªtªj¦«8Ê-•òF [†ÁMé¤Ñb®œžždò1Q}uZÿÑßUô(1º¿½ÿ%Ê‘Üj‹3ða\йæUY€%I ™ntOQ´žZS`V¢|O¿# y-ˆÿ©×Î ÊïGƒ6¸¿BÔšš£ÓHÑP!Q}F\ôÉõO˜Ÿ«ruÅÜIkâ¾úY þ¶U]ùLøpOTæ­‚â£{fX¹Ù½1:[DÚ6^á xTä¯Z¢ØMûî’‚’—êh£!‹!‡DÑöÔVcw‘kõ´ëGÞ¬fz®@x}\z!S\¯‹ç ³AÆ_ÃΈ>;2Ù)pg+=TTsL½öxN6ZÑÇi›~|D­Nr·¹¶¶y“œ25ã©­P¦+1_Ü @HæŽ<öç2šIÅ€»¿¦çRûG6ßc}є⠕{¼Í|4¿ßŽ)â‚]s 8À&h¤m–® `öq3<Ò‚£ }`ÍÉ[=ëHÉÎüÁdψsýñÃ9MT-¤Åá³Õ„Í*ð 'z†Ý‡ØÝNÿ‘9W§Œ8³B°^ß²E=õÓ[íŠ áï}¡X 3Ýc»É“|Ö®ÌËöÚGæì=<æ7i4<ÇU†Ôð+–Îb„«I³üÍ»ó&3¶_—"+1»å ‚¦»Sé&é|à¤?~Ê!—è~î§úÝj&‰Sv¥´«™EGQ¸ô«¤øF³8+_{MÝpˆvU¼o½€Â ÍQ5p×dñˆ÷¢›õÚ¼iÜþ¶;Ýó]æ”~Q =*)3õuÿøÅ`ð¨®$¶C&¡¬÷Á$pOà^C¢ãsÔ0WëÆ.²€–D>KdŒ/=¼æhô5œ~Ö²ÚÄGAÚ¬ªè»0ºà†£&|éRËZfC3¹`sÐÐP=?6®Æ¹7à”PŽ€Ç¿g%WçA7€1}÷3m.î!²Fœ Ñ|ɺ%:#)FÝ%^$¥¤*×ô’ðÖeygF8É/Qâ‚Ú ãß„h?åx¿·àƒ ãbxÏ^ÉöÑ'%¬ÁËI¼‡ž¶©?àÄØKD¦l’;Ž´.ñŸ˜G×UáÚ.äñU{ÃgkäÏÉ_ʆ>G`iLš"¸âPÌ—V ÕÚÜŠ:ˆÞжû»—úÛ3뉪ŠVÅ¢ð¾e1Åîs7´ñ Ö-_GYº¡¶C`”EDOôס°Èo òWçG5“í§hâNgÈVˇ½¼·ZPŠCŒ™U™Þ†)¢fPIŽA[J[õóƒÒ–ÈúB榰ð]•jó2'b—bbDeË#¶6=}_bÄ볌àE\ã‚¿‘†÷8þÄ÷?”?þ9•¡(Œ šC?Ö[¶èã­3Ûµ¤]ÔÉê©®1€gÓªreÓA·˜9<=õÏÒ SÞ¼m“Eˆ ±­æ/Üq0κÿ—Åó3m}{ya¦Õö™ RÖË„Î3‘«•2mTNÒÉ5?“Ø/0ž,J¾!Yw · ¶I+ñ0#ÿˆ|ÆNðàyéá(ÄlFºÈy$õ¼LÊÞ½!à; ë‘éi‰ON˨ŽNs%SÆÆ›ª†V{s¨~¬ ¯À)ò¥¿¦:«Dy8óš"KÅ1sXmÍC~õ€b=á‘r¼X LÔeWè'D#Wð5ÂùôI±Íå—löRg³½\\õœSœ˜ÍËåÆÉŠ)Û-,AȱÝ.Î’ý6£¾þèÖ ” ºÑR²=…I9לuCÏÓÜ9ÒäS0Þ•û6IfIE‡GŽÎÖiF±·‰’T?Ê$Ê¸ï»ØµiÞ]5ÁÙÙ≙ ûŠ÷ËI ×–³þ±s¯`­w—Ù<¹lã¶a$ŒuÁn0Ò!¦uF9½cÊš’g?iбñËRS4ƒµúV…¾''é¡`ý’CÐ&cžõ nâmòsŒê÷Ÿ~•© ”p¦wàŒ¾6K€eÇ£ÆsÖ¯e‘µ“µL¿+Gª%Wc¤ûjÈ÷Næ]cò 삳_7mÀ.°J·åxe,[‰½P45H#H˜îu–¶1Wc0;Ç^j†.Ûg0ûíÛùyú¡ðg†æ0ˆKˆEí=…uõ´V;'qÎ`펭¥D„KŸ9Ùû®“Ë®L² å 71)¦=bÌçëÁfT>ë°®ú;WÑ $—¥,Õ¸ÚäÓ/éåKY8¥ÙÓF#,·§iwè_ºa˜KÆý°["³EÃZ'Í?KFÇfÍÛeÜëÏc”‰ÆÀçÝbi¡wlµN$Þ-º Ñ ¥ †2ô·Ÿ+Ó|¹ò+,8–VP{³ÂÍ'`MÅ3€iµµØš›íìæ‡F"¦VŠÜ¼J,$™êV¾IûCïþtÛÆœÝø^޼˜E?Zìo6êïFa ¿wëÊ8'º·~ Õ§ø²U ÀG#¨–_KÙuåaQC{v.t…Ø·R›E%Éí˜Ùžaìb䀔Fi˜9¢äpcÊHq Ý×nÃTÝÚ¨¿ÅôŸ|Û«#y:7`ÏŽÖ>²¹B“\QoÓ—Ïx ® í ‰©Åšçã¦Óä°÷4]Ûn;üX a$m‹tñÃÓÄ{¾Ù•áýú)T\•ö–B¹×Š^ÿ˜þ¤NYíoý>Ê9]€Rߟ\4Ì?…½>ãZ¼¥jå=.C+±ÝÀê¢#/žp+…Iƒzõ —¦fÛ/Ó'Ó‡l}ñ£Ñ ê³Á³•X+jòÄhä’ûN¸k°ÿy’üuD(ލ¾Ø7²çvooã\çÜ!º(eXSOö ªugý€$ƒ‰6f…ħRã8ÆV0ñA`3^ itpiÆ3a¾ŸÌý+‘±¢ SMÄY'¾¸Õ‘ðHÕn­:•›Û´Ž“ËNÀk†ý7ˆ÷Üâz.oéæsÊI™Dw¢Û+OæÉ˜dHc=µå9¯Ùä;dÎe² kGXúLàe Eewo<Ðp¹ á2:}*wûôÍ´cK°C: kE/°ËRÚ}>íoŠÿIiKª endstream endobj 189 0 obj << /Length1 1177 /Length2 7066 /Length3 0 /Length 7846 /Filter /FlateDecode >> stream xÚmsu\”[÷=%à¢t Ý J#¥€tH‰ ÃÌ 03„t3„¤” ÝÝÒHHKƒ”””_¼÷½ïý½÷w?ÏÏ9kí½Ï^û¬ÃƤ­Ç'o ·?Ã|Bü‚’@MÔ…Ð3‡©óé‚­QªHs{à-!f`cÓ‡ íÁÿrK*:Í‘8LÉy£oƒj˜;…B‚’‚â’¢‚·kA‘¿áN’@m'þ¨ F‚ì!°[J BAÁ0¤ÊÁÁ¶Ô#à('! ´ºíðßO*ÂÜœ Ö6H §®!ï߈„„ÐÂí/¨F@¬a@öÛ…3Øîðû´ÛOÁ0°Ómã–¿cµ­Ì•-!Èß²œ6H¤ƒ¤€€ƒ•9øãGXñÃÀH®Ûf•a–ŠpèïÀïù)AœÀ [anÿ6C;Üæþ¯”fù‡ZßÍü)ô6‡Yzº;À€Væö°'Ä |û¸#ÌÁ@¤ ìéþÿÿ» -! $Ðl}{%W¿…ÁVî5Ì‘NW © ¿  Pð÷÷ß•ÙíåZÂaön‡kšCÁ@C=E#]%žÓÿßHømY>¡Gâ@>aqQ Ð­N 1‘VÕ6‡ü§+Á¿“UaVp ÄŸÍßNí/Î`'Ä­+œ˜˜ ø¿•4áH äüÛ0/Åo½rûúW#ýÿ¯vúçOPööÌ€óOñÀ[õ :ð·~ûÛ'ò{Ðÿ—e…Ø»ýKÞ? ÁZÿ?åþIÿY]fmò ÿ BO ®`Kmdó§KþÄ `–yØë‹2æÐÅ7ÒY¨PêxO—VæÎ뇄¿´LÃ­Ž­ÍÂzT˜ZN̘Ài±«vq˜•3~~.Ób¬á¨Y:"Ô±—ÀÓ]´{ÅéH3—›ÎÑv_lk“üxåêâÇ yÌ,M+wÇÎÍL¤OOC0Â`Œ¡¼ VÔ‚Ä~-rbؼàeŒ¿ ~ì‡ê‘”C§pIÈѪà~TsO¼S™.qJK "#ÕÿyOÀá´ßøQM]zp¸¦ÁRÙ“$ã+p^Ë|Îò"¾u‹u^B%Ã)€^"ï[’{XÀÛML^ØÝ±.ªHÚZ¢»ÇD‡ùÇ_UF‹Š…o4ËÂŽ U¦5^Íéîä,¿úþÌfäF¤©ö“ŒÇez±ÉúÞ™OLÏbÌÀݪÓIp•Ž-:û’5>Ì@Cà‡2•µ˜ø„:ÎlJ˜Ér§ôÓ«»ÞK§ÜŒq:/˹…”Á/#oLŸ >ºo<¨¼`vÉJ²œš¯À„Wáýh`}•7*ì1 (СxY ½ãTÍ K8˜¦˜1%˜ùÐËOWž¨èûô./tÕ‘#¥×[]IÁÌnYg`i±÷RóNªè7 ÓÁûTá’=ØB3™¤×õ“oÈ®‡wˆÒ0fˆ[{xÒ ÙïѼ*>î©x€¤E¬)På¦Éç¼’ö‹ã/™:1ªNQ×e)èEŠç~€@O–2sDêâ1,ùN"rébœŠa¤-èеèåÓbyæXÜíG _a;tö<‹ýÛ ë¶Êb3Vñ2 Ð8ŽvõƒÝµ_PíÁq̃/ôjޤiÌMš ‚ǵn.Y¿DýŒýìÖ¥©·Ü˜Â˜÷Yá⸇u¢s—r1úê—IƒuÁãš~Ø‚Â;y¹Aƒ:M£ç¼jiÎ…)@Cmì£ý½ïW‰ÃÔY¢ÞJHp?Y‹5ö¶œ§&¤z¶lÓ'Ï}–Ÿ¾ècâ·ëP93cÌ Œ)ýBb3í³†]ù(“ñhfìJŒ´ÈSÜCÛ Úú7ØW¾§ž2S$±}Ü¥hžx¾»/?q'“Dy0‹8³ùXïì#ÑY¦*…SóÏtݧ&­-Öâ„xŠAjÚãojŸÓgcRáSrioˤf-cêã³hÐ jŠPìÑ¥}iMWjòË<ýæåñV²Tï*¥¯R…;öõÀ<¬Þº•/rÙ¹eXÝ%ÓI’¶î[ô/øÐÔMY.”nVWÞ4á»S î£û< aБk>þd{nÈ”¿£sëÆFþi}îµý„ÿUµ»“åOÓÛ1Èg‚íço»½Ûœñó®ƒ+ñØ@PFÁÜ_–ÑŽLnþx÷pZ?V¦æ8šfgù%ð˦eñ¶™IÉÅ¿c ÇÞªYNðl`%?m˜g´,¿£ç˜pbÒýaŠ’ÇH»€ÁóT5Ý®lÐZnðÒSÚãå"¬A»žû1Îö¢ÚUŽÊa¦ö=_&‹©&Éш¨âG½Jn”‚ Dþ’¦‘B¤Z%CˆšüóB—­Žq‹ ŽƒÒáœà›÷¿Ê±6I¬#TÇ«ö¼´ )¤˜ˆ'‚Ïp¢ÍklÐÕ:5, Ì­*jý¥?ß7䜋 *ö©‰]¯=›¸½hý^z¢ ™âaD8¯h•±_EA½HÈ*ÇHP‡$âÝKÙ²>pç'ÿä†SŽ`-JçnùÑãÖ `WÃ1Š«¾ª«dޏÑ-­ÑóÝWˆIU]&»ZŸH<õAÓä»Èiºy »˜èëã AåòóÅ_ÌüUÏ$‹¢tdµÌš@?ý0>ÉoÑ_ÁQTÅßwXÝ®µ —Ä9´÷˜±íqUW͘npŸïÚº?*(É$Ù;æ1<­åvQ]¦×üô%[ýEÌSe 3ÎYÞÙšÚZJ)6£{¹¯C‚¯ç•ܰÊ]f‰õ_µ<è«´hlõÖU_‰ÂͲ§*Oå°ÝcZz|=4’š÷>Roéæ/ÆáWæ¿“;¤Gêƒav÷•!¥²Y·«ÆDeàÉ ë ÛÄ…ÇaBˆÆB³XP•ï˜Qñâ¯#óÝIã6ÍÕ¤çëÜ 3sªPo¤CD˜8+_rTëuoÁt‘méç‚Ú‘þ?‹±HÛÕ§)çRw>æ¾W­qù“Å´æž3e|Îîõïšó LÜ02í_2|?o#ô»²zA?ŸÝk¹TÊùa¦êY=ÙsÒu‚‰ò’ZcüŸx¡l†±¥=ì‹õ“Ï ?s¶¤~A»†„Æ+òŒáV‚…Üo£‚¿ìÅÓ(}#"[ÊŽ pFñÀ~.]õÜ5gÐ&Ìçwó\‹µ«ìèÎK?#ušY¬Éµð KüNùK€Ë†Ü œ'Ñ[© obŠ?…)p>©p‚#6ý' Kkw”–q¹vnŒ æÿÄ £²ü5;¸¤Yv¨g1ÜiªÔ=ê{W$Þ‡ù¥ŠTÓxwÿ“:Aý'¯Ç¾è~Œ©‰žþÚá_9Œ·†9»‰Eä{£\òci„Þ¥æI¿eØ`q6%l•švÊ)¤±ª³pq`üÓ%mG†õÇÅo³¾1í](•a2dö€}Ý ˆîçóûwe.ÎS;O *ƒ ¶Ç[û§O |[ýï7™¡r?O ·¨ ä×äY¼i™8®}ÚGMÐ)[3nEh%h^0¼³„ôJ}É£!âî+£¤r–0Z·]UÝ`¸T@O¥lõlNɶГ[?P­üé+ëÞ@f¾‹KQ—ŸXgÂÝY5?Un²QÝõR„ª“|O†i9\Ù1Í&~UJÅÊÌXÜô®Ì~<©ÅÇ##C#²á²SŸä|⑵¨ â¬ôÁð›’Ú<+=^øËD Iì7¯yGö¶ÇØÔMkÜ‚s1œ \Ôgd2,D7ÈÌÏÞ9“ÀÀÅA*xñ$Icà¤Ñ^fÞ/ðág‹y޵ Ãß‘V:~ÉZŠZct2¬Ód=~µƒnZ̬á3Õmx™ÇÏTÚÇ+ò²e=Òž÷é,nè`Qõ‚e¿?]¶¸K„«a³&÷bܬ¦KhY4ª€’úêIªˆø É£Hߟ­†P»z=–Î!˜ÒVS9ûb‡™r$ò.}°›öûÒËÜR†0Wìuñø|Š€üO½œSæÒ÷ØEk¢åŠ£ o°Z¾í+x }WáÈÀmwîg®ÉóèoQqŠWǤCù"³£ä†Ò—Sr/Ÿ?¬¥¯ŒhõzT¡4mÞBÊ®2O«@×Jö‘b¾Þ°±GÃ…E}Æ…J‹@R¯5ó‘H0޵[GóÁKã¼n\徇eïŽÚ˜”³d0\|ˆÑŒ–§õn&ËÎßÀž8.†7܉õÿÈ¥Uæ g¦†wÙ¨T5§t¯é5›èàÞÂÆÚûÝNþ~5yЗ$IðªéÛ±ãðx¼´ c ‰B ^ÉŽ“Ù¼ÒNð¸¨!ÃsoN=Ú¥¾\ä¤lè»›iU¹,qH®¸2üº'»öÝ·{ƒ†)†šÊ­&"h>)\Þ)âþ€„XÙZ™€â󶯲š):V00»]ëÏÖÏ CÊϘ,k'_èãk`';üÐJýœØ¨ä•KæšÞ3Gö”r“õ¬'39õ7Þ^e¥òj3xÏ»gGúä* n4~ï0Ì5b°­›Ùç ¿dMÊÔžôkš•(?|oÍvGs_ŠäZ|v_½#XFÊ¿ž]êRS‹W˜‘@/èëûu ;ogr(F‰Ê÷*GäÕÑÁPŸuRyÇãO_óéÜ=S»uv_Ò¢TäÙù¾•z·/9ÿqoÉ=(cé@ÜåHìàw­YCœš¤ï?Ëž_©{ dï™o© S³†“£ˆôè¼eýú˘èxÏ ~EFC lã:œuʧK³.¤m£Í)ߨÄʧ¯ KÅ3„jO.E&ßÕ$);ð\Or%×Å* ge¶{t{òó”}Ћ8ìÒu”í¤^´IÚf Ó ¼nûؙƖ8‰¤ã “ú*Æ!q¦×îÚ–Šß8zFÈm!k^_`à!1zOwMà]¬YÂu¥èæ„0ln¨­Ç_zü:ºÎØÄMÄ\‚ì°®ëóÀAƒv½1êɰÕÚóNß§—ÁFØŠ `ðíÈ&ì ‡XA-ù‰}ÎüTRþÃjÑIòIˆäªúÞºZ·Ï4N}W/MÚØ“ý#åØ/wCÚìç_lúS ÷F œ!8_‹Ñ¹Žæs«€…gÚ /¥_»âѦ»=ÇsÆ3¶;>ÁÏr[Ùm˜=Çì#i(WX½k•"5Samþ=òÀ+ó¬É‡c‚#ã†ÊÓ.ŸœaÑÿÇ'AÜ,¤]âEr¤ÐËD¦f]@ˆKO |¦ó¨< U§Ï@ÿ‚ßTÀONøt_‹qƒÛÔc‘Ÿ ?'ù=Æîà Th\‰=­úâxfM_b'寉¿?3xŠ=¼²ð’ØÃt€›˾àaþL,¦È€f»«éª97KHÆ" K…¯ÔãÛl†’6=û Ô_ªìf¼M¯ßåLz¿Žg:‘ÍÊÿåµ Ô`{›Ô·ªl6Øç™ƒÚúV ôáC«hæZÐiJd…}Pç8c¼‡œœt•ÃÝ#—tuþ¸ aC¸á”Šx2 Eöþb]MÓa~[Hž©ÑëñÁÇlO Pq 7W¹ÜUj÷´haùJ™yZAw«IÂBüÓP6ø~ÁÎù–zò h§ó¶2f­¾‡Ga $[=ð€Žðd–xqÍ!¹9öýévYµ;F‡0¦TyLi39\õ$tWÍN‹’âŽ.+/id‰}Èùó뉧«Æ5JÅF¸Züi Ä­zÇÓðÅ ’ò„(9ÒëaG2¶ÉJ¢Œ3`¥½uúÐdc kRˆ/{%ÿíTÚCÇ Q9ª vÞûdܶX];³ªu/>epõ â‚íH?+ÝyÅÝuÜžô íjúkܸÿ¤¯¾K>æ~ú®'Â\W£ö} ýU‹ øÌ_¹ù‚³ÿ[l£O½b°°>OœÓ³e,yº2xˆ¡‰ßîëm ‘QÊÌñX9>‘ÄÙ9ù°¶šàPâ¡uð»ÿ¦M=锲´]²yT5Ⱥôybêýö“É¡õäGD zã)-Úæá²¼†–œM^¥×¥^ÕÜõ<o„'ÚêãùKrÍÚÔ_ÊÎ"æ‹]9Miè%V­Ý‰eÖðö»EÙí |”¶“Þom€ÍeSz”ý´øšØO¼büݳUÐд’‹Kó’‰o{ÒtÕ#iäX¢y*‚ÇC-›š4€_ù^_Ú1^… ´ÿV,Ó3Ù£$2”îh.ÖÇ㪃§+§ »[i¤7tý†)÷;Ùek]ɨ4iokØ_ â"Íhš®Ñ³T0ܵ®Ð qˆ[)ð9V6Í?çNÿ7ó"(yk²kÖc/е<͆á´$éÆ˜[7àý‹Î#‹Sm*:­ˆ .O†}÷Þ൲á¦ÁS-Æ¥œ”ŽPúÕl`­8[¶iäm|Œøû,¢÷zsÝ7®\7´m+Ç´¦ä©cJ¹?ãF’5sV´ i¡…–“éÜYÐß.øL÷Î’½žwxÛ"Ì—V¨‚\®òe~rŒUŸS“§ãJý|·E*ÁRá'0Ãm¡±K3Õèò)Ù‰†ö°KË„<èõ óÈĬ¢ö}¦„ÎE8TuOä‰Î|)/s ÀÿylS…‹P_Ùš{ç~X.ƒœó¥V0ï²É¾Y ¥]ñš)€8‹ÁAÇ6Ž£Ú×q=’_”EMØšI|Ow¿@lãEŠ ªÖš¤~R]`GÖàQ8µúÀ¯ß>Ô®W;ÛQùM_–ÅŽ:e' s¦9bVì—öÞÀítj7‹^œ“p;(ÐiÂSâGù]´ÊW'[vÖÓ3oQc*Õ€Ý6&cßx¶³ò¾‡­Õ6^<æ–êwaÇqŒjúµÒ‡X.¸Xß‹½W®i`ˆ±Ä¹¥WÛâNõiá d Å{RåY߬õÝE·‰pk•;ø­ËÍ$ÿüЂ-ÎÍ%ý¸†˜Gh–cöŸŸåè•FRàCÞšöö!$³éÇTêÙÓwÏ 1Õì|O/ð)6»]¶#í…‹¦Dƒ<4è*}#c±¾±š˜êx® û“ ÒÜðJÓY@ûoœ‹~ͽÉ2ž¯Jí)ÅLýER4½r@ô_í<]=Ùf¥,jÒ‰¾®©$3n’ý ‹­¹ëqó|]‘Éu|.´Åo²t&¶ã¡•a×<:n'×ÛÿRϧŽª Ã"›/©Y!>ñ¿‘DÓÆlÏkW½¦tL:æ.›)?}É$U•r¦VL`Ã_3ï^2é¿dAI}Æ´… ÊÝãÕG`„wzª}åkø…ný‘¿&6±—à5±,™:±=^eŽÁ0fSÌÈøÀ©æŒŸµw,eÑó]ô$çšnW˦ÄQ¶™i¶n{¹gN°˜O¤Èäîü€Ñžø÷Àe®¬R\&) M$ë¯f?Ú™îd²è® Csb¤Ü÷«b¶ö¶á”YÒ ì¤öŸ2ÇN"‘’Ú%÷Ï7¦ ñ\¯ÑTŸ}O5tµýºÑI¸Ï×byÔ«„ûÍZòS§Wû>*åÉ”¬§­¾XÉÓø¤Y”ž$¬@ãú.„˜´gA?„-½ÝMÙÉò„îñ9”øxø3yÔÈͰ2>d¥œ.1ýñ¼¾Ï·y>p볆n /i/…èU鯒êŸ&¶ºí˜t2ÄPÙI>__xXË]¬M‰‘¦ëlôT„>&¿é?õBŸùáN¾ánn21þŠ÷ 7ÞËÆ@Ë…›Ýl3~'=]ñ£OûÕ|%F–›Öùø]@iò"µæH*–†R£Ä}œûó´\9 k›+ìzäi Ù2¨y£wô}C%û%G?öøüÍØ¤[õÜ/ C»w d yŠ_¼qð3÷Ñ &¬§=4Öq~ëæCVíUš컊 @xjŒéÔ0ˆ$,—(Dov†à£†‚àŒã§'ëÃú¾¥ JD< Š”èùOß~ sú)1õûJ ºñ7“¬öLvîF ¥Þ¦žÑvŽ't5ã´/fÝ´ù'‰ÅÑ8N§ðy~Ø¢’R×Án44Rh†ºKÝ[{$œ%½÷˜@ƒºï¼ï™¯Í1"^ùT­ YÌ…T•&·;³6ÁÝKƹŸ6Å„Í|‡ö~ÍU˜æygÄc˜ru´q&&¯ó[&¿mפ°¤Å)Sµ<Ž&U ì´oWBÍݪ…•€Q£CxHéf0×q Ôn;­Ì}ïÙ¸œ¯Ð²sTw<ÖÌy‡úMü,SPyLïL|ga*íÏDëï…LKÅwÌǬ ‹(ÃÞ´o´<\ÏzTu%zÁKÙ$áö½G©W¿OÙ´¡BŽÐ[ìÐí'òÇ2‚±ª-°aâ´ø[Íý_œGn endstream endobj 191 0 obj << /Length 696 /Filter /FlateDecode >> stream xÚmTMoâ0½çWx•ÚÅ$ !Ù ‘8l[•jµWHL7IP‡þûõ¬V=Mžß̼ñ s÷ëu;ÑU··õÈÙ›=w—¾´“ì÷îÝÝå]yil;<[[Ùj<=?±×¾+·v`÷Ù&ß´õðàÈ›¶<^*;²~&ûQ·‚>ìþÝþ”MS >Ù_êãP·ò{=éÇsæ@öd”ôÇöçºkŸ˜xäœ;`ÝVY×`Œs4½JaÓQÜ¡n«þª‡í¡.’Uu9\ßèY6î>¼ý<¶Ù´‡.Z.ÙôÍž‡þ“4>DÓ—¾²}Ý~°û¯ÒÜÑör:-d0­V¬²WÑÍÿ¼k,›þ8ãóþy²LÒ»ðºÊ®²çÓ®´ý®ý°Ñ’ó[Å*²mõíLrŸ²?ŒÜÔqù¥ã• â5F8@ šˆ=@Šð)&°  È8Ô¹€ÂÅRx u€Dº\j2H—†ª¡ÐVÁ¹0CzL]ø Âb°ct‘I ©g$`htÑ‹0œÆ\F„áŒ0ä†sê‡á jd< —Iê6œ»õñzgóñºË»þê W ¤qÈ’£+—Ÿ#ö•ñÌÇkÄÞ .‰bªsré…¤šáæÄç†bïmŽXú¾„Kß7ǵHß7Géû„û¾nb§>&jÊØµäuœ¯¼ú•ñ1ÜV™÷•âÜãâµÇ‰Ou$ÕŸqWèS/%1{\øxB!€§ÔK(hH©—TЖ枃»J©Ïϯv×ÜëÁ=küÒ2ø¥UðKÏ‚_:~é$ø¥Óà—ÖÁ/¿Œ ~™Eð+7¿èË¢/ ÿlì¡ÛÒ(/}ïö -+ZXukoûìÔE?Z„ãæÅÛKýqíƒÄ endstream endobj 192 0 obj << /Length 695 /Filter /FlateDecode >> stream xÚmTMoâ0½çWx•ÚÅ$ !Ù ‘8l[•jµWHL7IP‡þûõ¬V=Mžß̼ñ s÷ëu;ÑU··õÈÙ›=w—¾´“ì÷îÝÝå]yil;<[[Ùj<=?±×¾+·v`÷Ù&ß´õðàÈ›¶<^*;²~&ûQ·‚>ìþÝþ”MS'“ý¥>u;áà¾×ÃÑq~:fc_0F)l®»ö‰‰GιÖm•u f8GÓ«6•ê¶ê¯bØÒ"!YU—Ãõžeã.ÉÛÏó`›M{è¢å’MßÜáyè?IáC4}é+Û×í»ÿ¢Ìl/§ÓÑBãÑjÅ*{pÝìϻƲéOÞ(ïŸ'Ë$½ ¯ªì*{>íJÛïÚ-9_±eQ¬"ÛVßÎ$÷)ûÃÈM—ÏñP:^9À ^`„ª‰Ø ¤Ÿbr š€Œ@ ‘{@(\,…RH¤Ë¡&€ti  mœ+3¤ÇÔ…Ï ,;F™$Б€‘zF†F½ÃiÌeDÎ(ó0œAº1a8§ÎyΠFÆÃp™ nù[¯w6¯»ü·ë¯Îpµ@‡ )9ºréñ9b_iaÏ|¼Fì-ÐÐà’(¦:×ù(—nQHªY^`nA|n(öÞæˆ¥ïK¸ô}s\‹ô}sÔ‘¾oA¸ïë&vqêcâ ¦Œ YK^ÇøÊ›!¡_Ãm•y_)Î=^ ^{œøTGRý÷w…¾1õR³Ç…'ÄxJ½„‚†”zImiî9¸«”êðøüj'pͽܳÁ/-ƒ_Z¿ô,ø¥ãà—N‚_: ~iüÒyðËÈà—Y¿2qó‹¾,ú’ðÏÆºíŒòÒ÷nЪ¢5Q·ö¶ÍNÝ Yô£58.]¼½Ñ¢ä‚í endstream endobj 193 0 obj << /Length 695 /Filter /FlateDecode >> stream xÚmTMoâ0½çWx•ÚÅ$ !Ù ‘8l[•jµWHL7IP‡þûõ¬V=Mžß̼ñ s÷ëu;ÑU··õÈÙ›=w—¾´“ì÷îÝÝå]yil;<[[Ùj<=?±×¾+·v`÷Ù&ß´õðàÈ›¶<^*;²~&ûQ·‚>ìþÝþ”MSÏ'ûK}êvÂÁ}¯‡£ãütÌƾ`ŒRþØþ\wíœs¬Û*ëÌpަWl:*;ÔmÕ_Ű=¤EB²ª.‡ë=ËÆ]’·ŸçÁ6›öÐEË%›¾¹ÃóÐ’‡húÒW¶¯ÛvÿE™;Ù^N§£… Æ£ÕŠUöà ºÙŸweÓŸ¼QÞ?O–Iz^UÙUö|Ú•¶ßµ6Zr¾bË¢XE¶­¾IîSö‡‘›:.Ÿã¡t¼r€A¼&ÀT±H>Åä4€"÷€P¸X ¤H— BMéÒ@5Ú*08WfH© ŸAX vŒ.2I ##õŒ .z†Ó˜Ëˆ0œQæa8ƒtcÂpNò0œAŒ‡á2 @݆s·>^ïl>^wùo×_áj4RrtåÒãsľÒ žùxØ[ ¡Á%QLu®óQ.Ý¢T³ ¼ÀÜ‚øÜPì½ÍKß—péûæ¸éûæ¨#}ß‚pß×MìâÔÇÄAM²–¼Ž3ð•7CB¿2>†Û*ó¾Rœ{¼@¼ö8ñ©Ž¤ú3îï }cê¥$f Oˆ#ð”z  )õ’ ÚÒÜspW)Õá9ðùÕNàš{=¸g-‚_Z¿´ ~éYðKÇÁ/¿tüÒ:ø¥óà—‘Á/³~eâæ}Yô%áŸ-tÛå¥ïÝ:¡UEk ¢ním›º²èGkp\ºx{)¢ÿÔÞ‚÷ endstream endobj 194 0 obj << /Length 695 /Filter /FlateDecode >> stream xÚmTMoâ0½çWx•ÚÅ„@…ì„H¶­JµÚ+$¦‰|(„Cÿýú V«ˆ&ÏofÞø…¹ûõº›è²=؉zäìÍžÛK_ØIú{ßEwwY[\jÛ ÏÖ–¶OÏOìµo‹Ø}ºÍ¶M5<8ò¶)N—ÒŽ¬ŸIÆ~TM  »·'E]WËÉáR†ª™ppß«áä8?3‡±/£”?¶?WmóÄÄ#çÜ›¦LÛ3œ£éU›ŽÊŽUSöW1ìi‘¬¬ŠáúFÏ¢v—äÝçy°õ¶9¶ÑjŦoîð<ôŸ¤ð!š¾ô¥í«æƒÝQæNv—®;Y¨`> stream xÚmUMoâ0¼çWx•ÚÅvHU„dçCâ°mUªÕ^!1ÝH ý÷ëñ#xÙö?ŸgìÁÜýx]OTÝmÍ$|äìÍœºs_™Iöss îîò®:L;<S›zœ==±×¾«Öf`÷Ù*_µÍð`É«¶ÚŸk3²¾'ióÑ´ž‚}Øý»ù=©½à“í¹ÙM;áà¾7ÃÞr¾›f¶ÆnjÌ-ùeúSÓµOLg~¼À8÷ã ãâþÈ)okà çA„8 ö$`I\èÎ×3`çAfŽã<ÈZ]ƒÂ!‹„ê xNkÇyã¹ãÐð"œ7Á¿ _¥ã“§Ìq âH`òáö•‚nú¥¤kÌÂðRONH=CpB:# =Ñ%8“ˆ88QA~¡!*ÉzÆœøÐäT?!~Ž> étw©8éÄy*ás£¤Ï }nÔÌçFE>7*ö¹Q‰ÏR>7в¢ G]¼;~îó¤ŠÛ<©ò6OšßæI‹¯yÒòkžtèó¤g>O:òyұϓN|žôÜçI/|ž´òyÒÚçIg>O:÷yÒ…Ï“.}ž2îó” Ÿ§Lú> stream xÚmUMoâ0¼çWx•ÚÅvHU„dçCâ°ÛªT«½Bbº‘ A!úï×ãGpÙö?ŸgìÁÜýxYOTÝmÍ$|äìÕœºs_™Iöss îîò®:L;ü2¦6õ8{zb/}W­ÍÀî³U¾j›áÁ’Wmµ?×fd}OÒæ½i=û°û7ógRúùd{nöCÓN8¨oͰ·”of™-±Ï%æü6ý©éÚ'&9ç¶P´uÖ`àL/"Øt”µkÚº¿(a[è „duS —‘û®ö$°xýqÌaÕîº MÙôÕNž†þÃé{¦Ï}mú¦}g÷Ÿ…Ù‰õùx܈` étw©8éÄy*ás£¤Ï }nÔÌçFE>7*ö¹Q‰ÏR>7в¢ G]¼;~îó¤ŠÛ<©ò6OšßæI‹¯yÒòkžtèó¤g>O:òyұϓN|žôÜçI/|ž´òyÒÚçIg>O:÷yÒ…Ï“.}ž2îó” Ÿ§Lú> stream xÚmUMoâ0¼çWx•ÚÅvHU„dçCâ°ÛªT«½Bbº‘ A!úï×ãGpÙö?ŸgìÁÜýxYOTÝmÍ$|äìÕœºs_™Iöss îîò®:L;ü2¦6õ8{zb/}W­ÍÀî³U¾j›áÁ’Wmµ?×fd}OÒæ½i=û°û7ógRúÅd{nöCÓN8¨oͰ·”of™-±Ï%æü6ý©éÚ'&9ç¶P´uÖ`àL/"Øt”µkÚº¿(a[è „duS —‘û®ö$°xýqÌaÕîº MÙôÕNž†þÃé{¦Ï}mú¦}g÷Ÿ…Ù‰õùx܈` étw©8éÄy*ás£¤Ï }nÔÌçFE>7*ö¹Q‰ÏR>7в¢ G]¼;~îó¤ŠÛ<©ò6OšßæI‹¯yÒòkžtèó¤g>O:òyұϓN|žôÜçI/|ž´òyÒÚçIg>O:÷yÒ…Ï“.}ž2îó” Ÿ§Lú> stream xÚmUMoÛ:¼ëW°‡éÁ5?$R. ¤d9ôMðð®ŽÄä ˆeC¶ù÷³k›m‘CŒÕp¹;;†wŸ~>Î|¿Ž3óEŠ_ñ¸?O]œ5ß¶‡âî®Ýwç]Oßcìc]=~?§}÷Oâ¾yhÆáô9%?ŒÝ۹׬“B|Æœ‚>âþ)þ;ëvÇw%gÏçáí4Œ3‰ä§áô–’>\ ‚‚6ý§ã°¿ õEJ™€õØ7ûÆ8ó 1¿’{Æ~ºðÏ`W(-ú¡;]¾è·Û%=°ùñýxŠ»‡ñe_,—bþ+-OÓ;qü\ÌL}œ†ñUÜÿI--=ž‡·B«•èãKª˜æÿ¾ÝE1ÿpÆ[ÎÓû! Mߊyuû>Û.NÛñ5K)Wb¹Ù¬Š8ö­iÇ[ž_®¹uÊ•MúÑzQ­Š¥Ò)V†€Ú(TØ€àx¿àÞ¢ žjy‹°°!ÀÐÔ•µZÔÀ2àP="¦ZdÔ0\ÃG©R\¡·”).–2*ÎШa!„U¼Ä,†³ÔÛHð° `+jÐÃ.¸5Nα@èâ°èÐVK-àxŸ%ô˜Ü3š% A°YÓ€z¡ÎšÔ>kP#¬³¦õ™5m0W£oš¦Ã¾žj­®§Üý·.†ÐZ¡ŽT$X/©)n)æ#W—„o(æ“oÀRZÞ $K¢p4’ŽZ¶-bâ\­1¦Ü°Jä æP"Gñ‘XÔQ¬‚i/8ºkÉ^€ÂZqŒ:ZsŒ½š9”d š­Bù Ž)ßsLù-ï7½æx˜ÏJ›¡¾Ò`¯ažÉ½)f¥É$†µ’1™¸ dÑŠcªCZCù<£7Ã3JÊgózÌnøþHȰíáÌYÉšäTœ¯a…Šï¯Æ,_»œ-Ÿ—Oë87Ë}êÛKÔ´Ü—Ll¹oKñšò+Êg­JÌâ.¾GZyóº‹Vðc­48¸’ï¼äØWtù]Í:P~`áŒñ±–rZŽq.nÍ1]Ç ÇàSÿæ/©ßP•ýïuö¿7Ùÿ¾Ìþ÷Uö¿·ÙÿÞeÿû:û?Èìÿ ²ÿƒÎþ&û?”Ùÿ!dÿ‡&û¿1y–¦¼ÍH·œn5þ¹ã)º½ÝyšÒ“Bï½x#†1Þž´Ãþ€]ôGoáõñÅ×Mñ?®Xê endstream endobj 199 0 obj << /Length 900 /Filter /FlateDecode >> stream xÚmUMoÛ:¼ëW°‡éÁ5?$R. ¤d9ôMðð®ŽÄä ˆeC¶ù÷³k›m‘CŒÕp¹;;†wŸ~>Î|¿Ž3óEŠ_ñ¸?O]œ5ß¶‡âî®Ýwç]Oßcìc]=~?§}÷Oâ¾yhÆáô9%?ŒÝ۹׬“B|Æœ‚>âþ)þ;ëvÇw;{>o§aœIä> §·”óѲH˜ø´åŸ8‡ýøU¨/RʬǾÙï0ñ˜_xˆù•ÙË0öÓ…ŒxµBiÑÝéòE¿Ý.‰ÍïÇSÜ=Œ/ûb¹ó_iñxšÞ‰áçbþcêã4Œ¯âþfiåñ|8¼E°²X­D_RÁ4û÷í.ŠùGÞRžÞQhúV̪Û÷ñxØvqÚŽ¯±XJ¹ËÍfUıÿkM;ÞòürÍ­S®lÒÖ‹jU,•N±2Ô@  "À–,Àû  ð õTË[<€5€ €¦¨¬Õ –€ê1Õ"à†á›×cvÃ÷GÂ@†m¯gÎ üKÖÄ §â| +T|5f©øÚÕàlù¼xZÇ1¸YîëPß^ê ¦å¾dbË}[Š×”_Q>kUbwñ88Òʘ×]´‚k¥ÁÁ•|'à%Ǿ¢ËïjÖò{ g䈵”ÓrŒsqkŽé:n8Ÿú7ÏxIuø†ªì¯³ÿ½Éþ÷eö¿¯²ÿ½Íþ÷.ûß×ÙÿAfÿ•ýtö0Ùÿ¡Ìþ!û?4Ùÿɳ4åmFºåt«ñÏÑíÙèÎÓ”^z­è¥À1Œñö öì¢?z ¯ï.¾~lŠÿ-qéG endstream endobj 200 0 obj << /Length 900 /Filter /FlateDecode >> stream xÚmUMoÛ:¼ëW°‡éÁ5?$R. ¤d9ôMðð®ŽÄä ˆeC¶ù÷³k›m‘CŒÕp¹;;†wŸ~>Î|¿Ž3óEŠ_ñ¸?O]œ5ß¶‡âî®Ýwç]Oßcìc]=~?§}÷Oâ¾yhÆáô9%?ŒÝ۹׬“B|Æœ‚>âþ)þ;ëvÇ÷zö|ÞNÃ8“È}No)ç£e‘0ñ&hË?q:ûñ«P_¤” X}³ßa†c1¿ðó+³—aì§ ñ j…Ò¢ºÓå‹~»]›ß§¸{_öÅr)æ¿Òâñ4½ÃÏÅüÇÔÇi_ÅýÌÒÊãùpx‹`!d±Z‰>¾¤‚iöïÛ]ó¼¥<½¢Ðô­˜U·ïãñ°íâ´_c±”r%–›Íªˆcÿךv¼åùåš[§\Ù¤­ÕªX*be¨-€@E€-X€÷@à-ê©–·xkM PY«…@ ,Õ#bªE†A Ã5rEqIø†b>ù,¥å½A²$ G#é¨eÛ"&ÎÕcÊ «Dž`%r‰EÅ*˜ñ‚s »–ì(¬Ǩ£5ÇØ«™CIªÙ*”¿à˜ò=Ç”ßò^pÓkŽˆù¬¸ê+ öæ™Ü›bVšLbX+“‰«@­8¦:¤•1”Ï3Jp3<£¤|6¯Çì†ï„ Û^Μø—¬‰ANÅùV¨øþjÌRñµ«ÁÙòy9ð´Žcp³Üס¾½ÔAMË}ÉÄ–û¶¯)¿¢|ÖªÄ,îâ+pp¤•70¯»hÿ8ÖJƒƒ+ùNÀKŽ}E—ßÕ¬åöÎÈk)§åçâÖÓuÜp >õožñ’êð UÙÿ^gÿ{“ýïËì_eÿ{›ýï]ö¿¯³ÿƒÌþ*û?èìÿ`²ÿC™ýBöh²ÿ“giÊÛŒtËéVãŸ;¢Û³Ñ§)½(ôZÑK7bãíA;ìØEô^ß]|ýØÿs‰éQ endstream endobj 201 0 obj << /Length 672 /Filter /FlateDecode >> stream xÚmTÁn£0½óÞC¥öÆ6’*ŠdrضjªÕ^pºH‰A@ýûõŒCf»êô¿™yã'æîÇën¦êö`gñ#govh/}egæç¾‹îîò¶ºœ­Ÿ­­m=Oìµo«Ù½Ùæ[׌ž¼uÕéRÛ‰õ=IÛÆú°ûwû{VÇQðÙáÒœÆÆÍ8ß›ñäIßž3d_ƒ “~Ù~hZ÷ÄÄ#çÜ W›ö c Ñü*…Í'qÇÆÕýU;€ºHHV7ÕxýÂwuö÷É»Ïa´ç­;¶ÑzÍæoþpûOÔøÍ_úÚöû`÷_¥ù£Ý¥ëNd0m6¬¶G_ÑÏÿ¼?[6ÿvÆçý³³Lâ·ºª¶¶C·¯l¿w6Zs¾aë²ÜDÖÕÿ%!ãpœ¨™§ò%¼b•l¢µËÜc€Ã¤ ¥¤ÀÈ ¤ÀPÀP«[ ßuªŸñ©_õgß_•ñxû4Ž$Oˇú<X^\NB8 ë\;c®‚šBbMx¹ ùy˜%ÆPÈ 3jok:E q:¹Œ/d4ˆ8ð€Q§4ÈA2="\¤ÂšYˆ+ÀË‹ÔÏsä(Äè5$ YŒ—Èú rŠÀ‘€ƒ~ì+A¿\HÈ•ÐWr߯{ÇNøxoËøŠ‡û• ¿”$¿TL~©ù¥òK¥ä—ÊÈ/¥È/¥ƒ†p˜1ðsòQä£*ÉGÍÉG-ÈG-ÉG“zA>ê„|Ô)ù¨3òQ/ÉG½"µ"µ&µ!uN>ê‚|Ô%ùh8ùhùh$ùhbòÅ,n~á†üá°nË£ºô½ß+¸´p]À¢hœ½íµ®í \ˆÓ†¯—2ú ¯M„Ç endstream endobj 202 0 obj << /Length 672 /Filter /FlateDecode >> stream xÚmTÁn£0½óÞC¥öÆ6’*ŠdrضjªÕ^pºH‰A@ýûõŒCf»êô¿™yã'æîÇën¦êö`gñ#govh/}egæç¾‹îîò¶ºœ­Ÿ­­m=Oìµo«Ù½Ùæ[׌ž¼uÕéRÛ‰õ=IÛÆú°ûwû{VÇQÈÙáÒœÆÆÍ8ß›ñäIßž3d_ƒ “~Ù~hZ÷ÄÄ#çÜ W›ö c Ñü*…Í'qÇÆÕýU;€ºHHV7ÕxýÂwuö÷É»Ïa´ç­;¶ÑzÍæoþpûOÔøÍ_úÚöû`÷_¥ù£Ý¥ëNd0m6¬¶G_ÑÏÿ¼?[6ÿvÆçý³³Lâ·ºª¶¶C·¯l¿w6Zs¾aë²ÜDÖÕÿ%!ãpœ¨™§ò%¼b•l¢µËÜc€Ã¤ ¥¤ÀÈ ¤ÀPÀP«[ ßuªŸñ©_õgß_•ñxû4Ž$Oˇú<X^\NB8 ë\;c®‚šBbMx¹ ùy˜%ÆPÈ 3jok:E q:¹Œ/d4ˆ8ð€Q§4ÈA2="\¤ÂšYˆ+ÀË‹ÔÏsä(Äè5$ YŒ—Èú rŠÀ‘€ƒ~ì+A¿\HÈ•ÐWr߯{ÇNøxoËøŠ‡û• ¿”$¿TL~©ù¥òK¥ä—ÊÈ/¥È/¥ƒ†p˜1ðsòQä£*ÉGÍÉG-ÈG-ÉG“zA>ê„|Ô)ù¨3òQ/ÉG½"µ"µ&µ!uN>ê‚|Ô%ùh8ùhùh$ùhbòÅ,n~á†üá°nË£ºô½ß+¸´p]À¢hœ½íµ®í \ˆÓ†¯—2ú á«„Ñ endstream endobj 203 0 obj << /Length 672 /Filter /FlateDecode >> stream xÚmTÁn£0½óÞC¥öÆ6’*ŠdrضjªÕ^pºH‰A@ýûõŒCf»êô¿™yã'æîÇën¦êö`gñ#govh/}egæç¾‹îîò¶ºœ­Ÿ­­m=Oìµo«Ù½Ùæ[׌ž¼uÕéRÛ‰õ=IÛÆú°ûwû{VÇq5;\šÓظî{3ž<ç»cæcìKŒaÊ/ÛM래xäœû@ájÓža†!š_u°ù¤ìظº¿Ša Éꦯ_ø®Îþ2 y÷9Œö¼uÇ6Z¯ÙüÍcÿ‰ ¢ùK_Û¾qìþ‹2²»tÝÉ‚ ƣ͆Õöè úÙŸ÷gËæß x£¼v–IüAUÕÖvèö•í÷îÃFkÎ7l]–›Èºú¿³$dŽ5óT¾„W¬’M´–Âc™B€{ìp˜”!°ôY ju«á»Nõ3>õ«þìû«2¯bŸÆ±“ä)`âPŸÇkÀ‹€ ÀIèÀ§ckgÌUPSH¬©¯@"7#?³d€Ã 9aFíïm-P§ˆ!.@'—1ð… cƒþ0ê”9¨Sæ G„‹TX3 qxr‘ƒúyŽ…¸ýB£†4 ƒñùA¿AN8pÐ}%è— ¹úJîÛxïxÀÀÉïmù_ñp?0£ä—’ä—ŠÉ/µ ¿TB~©”üRù¥ù¥tÐ3~N>ª‚|T%ù¨9ù¨ù¨%ù¨còQ/ÈG:%uF>ê%ù¨Wä£Vä£Öä£6ä£ÎÉG]º$ ' $ML¾˜ÅÍ/üÃð‚?¶ÑmwT—¾÷kW® X³·­ÖµdáƒëpZ¾ðõRF#üƒÿ endstream endobj 204 0 obj << /Length 665 /Filter /FlateDecode >> stream xÚmTMkã0½ûWh…öF²G*!àØ ä°miʲ×ÄVZCcÛYè¿ßy#9톅ļÍÌ{3ú¸ùñ¼›¤es°“è^ŠÛ7ç®°“ìç¾ nnò¦8Ÿl=hýzI-.¶àÐ_¶ë«¦~ê^JIŽu]fÍ ºû`ê¹ÅtTs¬ê²óÄrв*oñ·8Ѽûì{ÚÖÇ&X,Äô…û¡ûdewÁô©+mWÕoâö¢Š¼»sÛ~X(2X.EiTŒz}ÜŸ¬˜^7uY~ýl­ÙVNMÑ”¶o÷…íöõ› R.Åb³Y¶.¯Ö”O9ÇØ„bå«%9ÖÀvÌsr(MXú„a“#Dùó$ar b¶qMŽDžs!™ ¨F´KèRLDØÄìPˆ0.BEäHQ#͸FŠéÚuÅŽ577v›±«â}ßQÈ•anÐOèd$ôg;ú²A,ˆÉ™ËCÛR;¼6§À+‡Ñ§Ìx**Ę$û³90ó«²ó‡û¿q'°ão¶×§fÿú Q%nú˜œš;Î5pÊX2ÿÊù™Óé¢]$œ£^”q®ßÆ~¿ +ôs"FÚá´âš!æ¡CƒyhîIhÐ~C¡MÏÜn£Oíf™1æ“$#hÐ)ç²½r~hмíjÆ5¡ŸF̹k×#ónÇÐi<âß7>TÆå²ßsa>Æs¡Žñ\8s&ws—a®YÆ1þ:€+ÍÝÜrùÄá¢á1¸\ßâÜut³ùÅà[‹ûZÕöò¨´M‹,þók4¾w°ž6Á_%aJ endstream endobj 205 0 obj << /Length 665 /Filter /FlateDecode >> stream xÚmTMkã0½ûWh…öF’G*!àØ ä°miʲ×ÔVZCcÛYè¿ßy#9햅ļÍÌ{3ú¸úñ¸Ÿ¤eóâ&ñ­O®oÎ]á&ÙÏC]]åMq>¹z¸w®tå¸Ú߉Ǯ)ön×Ù.ßÕÕpCÁ»ºx?—nŒúÐÚ½VõgxÄõ³û=ißþt¦›ÐO"î¹Þiýû’ [\lÁ¡¿\×WM}'Ô­”’›ºÌšt÷Ñ4p‹é¨æXÕeˆȉ”eU Áâoq¢ yÿÑî´«M´\Šé-öC÷ÁÊn¢éCWº®ª_ÅõEy÷ç¶}wP d´Z‰Ò©õz891ýÞÔeùù£uB³­¼š¢)]ß ×êW-¥\‰åv»Š\]~[S!åå8Æ&+ø¨™Z‘c¼eÇ"'‡2„•¥ÖÉŒå5çIÂä@Ä|놉"¼àB2AQƒhíSlLØÎØ¡28a}„ŠÉ‘¢Fšq5ÒïŠnnìbfÇ®Š·CG= WêÜ¢íe$ôg;þ´A,½ˆ:“sŸ‡¶¥ñx l=N×£O™ñT”Ƙ$û³0ó«²óë˜ý_¸س/vЧæÿú Q%~ú˜œZxÎ pÊX2ÿÚû™Óë¢]$œ£^œqnØÆa¿ K‡¹ƒ?‘£?ãq FqMyíc0Ã=) &l(´™¹ßmôiü,3Æ|’d &å\ÖcÖÞ †·]͹&ôÓˆ9wã{dÞ-ãtÚÀ…xö•õ¹ì\˜ \¨cΜÍýÜÀe™kžqL¸àJs?·<œ@>q¸hx .×·8wÝl~1øÖâ¾Vµ»<*mÓ"‹ÿü﬇mômDaš endstream endobj 206 0 obj << /Length 666 /Filter /FlateDecode >> stream xÚmTÁn£0½óÞC¥öÆ6„ØU‰@"å°Ûª©V{MÁi‘@¬Ô¿ßycÓt·+%èù13ïÍØæêÛÃn’Uí³›Ä·R<º¡=÷¥›äß÷]tuU´åùèšÓç*Wo‡;ñзåÎÄu¾-¶M}º¡àmS¾+7Fý?hå^êæqýä~Mº×ß}kú ý$ŸêÓ|y'ˆBpðO×uÛÜ u+¥$bÝTy{„õ!šy1 ê¦êƒñ G‘Ò¢ªËSXñ³<Ò ¼{Nî¸mm´Xˆé#½Ný;{»‰¦÷}åúºy×[DïÎ]÷æ`AÈh¹•;P5ê÷ÇþèÄôK_ïŸÞ;'4¯•÷S¶•º}éú}ó⢅”K±Øl–‘kªÞ©ò|cSŠ•s&§æ^s œ1–¬¿òŸeΘO’ŒáÁdœË~ÌÊóð`xÛÕŒkÂ?˜s×¾GÖÝ0NàÓ-ÄÛ°o|¨¬Ïe>ha>6h¡Ž Z8s¶ðsƒ–e­YÎ1á:@++üÜŠpùÄá¢ásðqËsßÓÕæoßZÜ׺qŸ•®íÅþ=¬î7Ñ÷cÅ endstream endobj 207 0 obj << /Length 720 /Filter /FlateDecode >> stream xÚ}TMo£0½ó+¼‡JíÆ6„˜*ŠÄ§”öUS­öš‚ÓEj9ôß¯ß IV«ªÐcüfüæÙÌÍçŸÔÝ›õƒ{)^ìØ†ÊúÙÏ}ïÝÜä]u:Úvz´¶¶õyu|ÏCWíì$n³m¾m›éΑ·mõqªí™õ5)µïM{¥`qûjûS5MJÆK¿:úã©·ƒ?Ê—Èym¦ÇýŽ&ÜšørMP‰_v›®}ê^JéE[gݽÞbÖ'gҦ­‡Y¤xƒdOiQ7Õ4Ñ»::“¼û'{ܶ‡Î[¯ÅâÅ-ŽÓðIŠï¼ÅÓPÛ¡ißÅí— cwêû 5Bz›¨íÁvÞ<îV,¾küB}ýì­Ðô­XeÕÕvì÷•öí»õÖRnĺ,7žmëÿÖVœñv˜©¨Aì^R:ì­Mè°Yº—–ŒDQ \" H(Åa(NW(\ E½”»@†@ÁŒtDÑYQõg?ÌÚ¥Œ°µTœ‡\ßCžÔyLûêlÌ}$%pʹÄϘŸçÔ‰JVš14«žE9áÅ]šÃXÅУbÆhZ•WކfjÄ5ëÔЬÙ mvh­g§\vEc_Í5Cäàè@þ ç\Ô ŽCHqEõCÊ]fèq¹âx îw™3&NÁ½(à’qàpôÿq¢¹F²‡ðÓ¨«çF_ÏÂì?®ÎÀDì/tö”ï˜áë…~ {*±·I®Þ™ôzÁ ùž>¿ºMÁö.Á^1Ÿk‚:qÈûB_ÌzôÏ¡fÌzÔŒù¥T‡ôz‰SâS/ñì;Î,& Ë‚âì#ÿ6|Æ Î8a>}:ï iÊç ÓY?øyD¹9ø%ãr5ÿ5ô—à¿ÆLºLŽê4 n¨Ðà¢!ñдö2Ûú®G=4Ï£_O¥÷6ý% endstream endobj 212 0 obj << /Producer (pdfTeX-1.40.24) /Creator (TeX) /CreationDate (D:20221113175446-05'00') /ModDate (D:20221113175446-05'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.141592653-2.6-1.40.24 (TeX Live 2022) kpathsea version 6.3.4) >> endobj 176 0 obj << /Type /ObjStm /N 38 /First 310 /Length 1842 /Filter /FlateDecode >> stream xÚÅ™ÛnÛ8†ïý¼ÜE )’’,¨“8I›¤©ó¢ŠÍØjmɑ䞞~‡¢bëd'v·Ø›P¢,òÎ?3¤Âuàm:ÔQFœ3x„Çð«†Çx‘ÀƉ&0ù1ŸèBø _` S¦0ƒ¢0Ò-f:IÃq1ÄØ1‡yè(Gɯ,È\'fIMÆ#˜O)<ÁÓB§Yˆ|O‹8Ó£‡©½°¯$Bªg¡µ Õ_" ¿ƒ]‹ ²I¢5dßbXÀ"!Å0N4|…oð~ÀOø©“¸**oQÝnO?ZQ9í¢bFT&ü… Ä_•Ü(ªJéÔH§j”ÚÆ¨›ÛÞõýYn”j·É-E8h“ÿË6yâ ”WÅÄnÁ`Bá·DÁ#þºô±fn¡’Þ]ÿêúüÍ gò©’íB1ul»XŒ9WŸÓ•V*å‚®tB׈ÄÔ—•HhY$6cUmáÛØrÒ;¼œ¼9g‹tD§{Ýx:ZÏG“¨‡» ʉåh¾2*¿]ÉŸyk,c‚­L“ÜÙ¬ÿ6íß æZDkZi‹8_£aI¹èZV¨ªê¹.úÇWGe'ôõx±Î ¦V›=¥Œàþ¦äVu«:¯q‚_Ê«ÒáÿAÊÓÍ®Ew62K¬#Û”²Î(þ•ý:mqíçß—y°þæ¯=ߨ7wLJʰ¿U¾ìßöêÒ1~^'ßÈO ·Î¿ Ÿ=󸿕€¬|.–Ò±œWšÜÛë¢u¾ J³ÖY}-«ËØRø£a< £1Ú>>jtÿP§ä'×ÔO@eÁº,¤g“²¯ÛT„¹Ù*Ç*»0 @¶"0ÎÎuhÈ­r ç‚ε’«ÆFB®àg1²Â…]%<­ô‰·K¤–B”(^‰R¢¼’_¬GÊÑeœñì…’0¡{¢OŸtÙyœf Z†÷§Wù‹»…s>5£5¹xÈò[Ӊ奤ڭ™/K"_”€hh‡ô\û ] /Length 592 /Filter /FlateDecode >> stream xÚ%ÒIHUqðïÜûÔëËÔÌ9‡çX½Ò¬Ì1Ms*‡ÔFm²l‘è.ˆ6Ò.Û•Ñ&ˆˆ\ÈÛ„D” ‹(“Z´+(È]+õ?ÇÍsþ÷»ß»÷qÍÌþyfˆÁ,Å\Še“,’Nrà-VéÂ6Îùă%•ê,ƒdò,Ž„`™x!H ñ°¢Í…YI‹~ÕÈ&†ÕŒj$™l![I ÙLRIÑ< ’`Õº-•ÃA2l B›¹%H…ÜTå¾ 61¥;’XùàA:ìÆ˜Fø¾A&ìV²jɆݟÐù¬zý\ØãYè,6V-$°ùÕ"-ÞU-!ŰÕ7ªe¤öý…Ö°n'å°ŸÝÙIvÀÖ¾¨î"QØúÆUÝ@B ¹¬{H%õN#{IP¢Çéùö“}@e¢Fj þ•j-©Ú†TëIÐUµ‘4CwT›ÈA`ìƒÖGX‘fàÚ'´’`ò­j9 Lm,è íÀt“jé^W=JŽÏ—µžgLŸO7é!½¤#ýd€ ’ãä9IN‘ÓÜ0!Cd˜œb…úÝsÀçtXû¨t^ØWº/š£4¯7¢t ÞøªÒex·_*›ù«tÞò½‚!4øÌàýZPüÖ%~_ƒ’ÿÁ¥ü§PŠƒ¿4®}Z)¡Ü9·/ÞYp”¼w”¯8¢¾£¢ÖQ5á¨nqÔe8;š¿9Z—í¯]3Žî{޾Im.&üXc¥¤ ¡Gîêp‡ýÔAz endstream endobj startxref 284997 %%EOF fasta36-36.3.8i_14-Nov-2020/doc/fasta_guide.tex000066400000000000000000003172471433453312700204450ustar00rootroot00000000000000\documentclass[11pt]{article} \RequirePackage{helvet} \newcommand{\CURRENT}{fasta-36.3.8i} \renewcommand{\familydefault}{\sfdefault} \usepackage{cite} \usepackage{url} \usepackage{fancyhdr} \usepackage{url} \usepackage{needspace} \usepackage{longtable} \addtolength{\oddsidemargin}{-0.75in} \addtolength{\evensidemargin}{-0.75in} \addtolength{\textwidth}{1.5in} \addtolength{\topmargin}{-0.75in} \addtolength{\textheight}{1.5in} \lhead{\CURRENT} \rhead{\today} \cfoot{\thepage} \pagestyle{fancy} \newcommand{\FASTA}{\texttt{FASTA }} \hyphenation{Swiss-Prot} \parskip 0.5ex \begin{document} %% .he 'FASTA3.DOC''Release 3.6, March, 2011' \section*{\Large{The FASTA program package}} %% \begin{quote} %% \emph{This document is undergoing extensive revision. %% Some parts of it are old; while still accurate, they are less %% relevant. Recent improvements to the FASTA programs are not well %% documented, particularly with respect to options for selecting %% databases and database sequences.} %% \end{quote} \section*{Introduction} This documentation describes the version 36 of the FASTA program package (see W. R. Pearson and D. J. Lipman (1988), ``Improved Tools for Biological Sequence Analysis'', PNAS 85:2444-2448,\cite{wrp881} W. R. Pearson (1996) ``Effective protein sequence comparison'' Meth. Enzymol. 266:227-258 \cite{wrp960}; and Pearson et. al. (1997) Genomics 46:24-36 \cite{wrp973}. Version 3 of the FASTA packages contains many programs for searching DNA and protein databases and for evaluating statistical significance from randomly shuffled sequences. This document is divided into four sections: (1) A summary overview of the programs in the FASTA3 package; (2) A guide to using the FASTA programs; (3) A guide to installing the programs and databases. Section (4) provides answers to some Frequently Asked Questions (FAQs). In addition to this document, the \texttt{changes\_v36.html}, \texttt{changes\_v35.html} and \texttt{changes\_v34.html} files list functional changes to the programs. The \texttt{readme.v30..v36} files provide a more complete revision history of the programs, including bug fixes. The programs are easy to use; if you are using them on a machine that is administered by someone else, you can focus on sections (1) and (2) to learn how to use the programs. If you are installing the programs on your own machine, you will need to read section (3) carefully. \emph{FASTA and BLAST} -- FASTA and BLAST have the same goal: to identify statistically significant sequence similarity that can be used to infer homology. The FASTA programs offer several advantages over BLAST: \begin{enumerate} \item Rigorous algorithms unavailable in BLAST (Table \ref{table1}). Smith-Waterman (\texttt{ssearch36}), global: global (\texttt{ggsearch36}), and global:local (\texttt{glsearch36}) programs are available, and these programs can be used with \texttt{psiblast} PSSM profiles. \item Better translated alignments. \texttt{fastx36}, \texttt{fasty36}, \texttt{tfastx36}, and \texttt{tfastx36} allow frame-shifts in alignments; frame-shifts are treated like gap-penalties, alignments tend to be longer in error-prone reads. \item Better statistics. BLAST calculates very accurate statistics for protein:protein alignments, but its model-based strategy is less robust for translated-DNA:protein and DNA:DNA scores. FASTA uses an empirical estimation strategy, and now provides both search-based, and high-scoring shuffle-based statistics (\texttt{-z 21}). \item More flexible library sequence formats. The FASTA programs can read FASTA, NCBI/ \texttt{formatdb}, and several other sequence formats, and can directly query MySQL and Postgres databases. The programs offer several strategies for specifying subsets of databases. \item A very efficient threaded implementation. The FASTA programs are fully threaded; both similarity scores and alignments can be calculated in parallel on multi-core hardware. On multi-core machines, FASTA can be faster than BLAST while producing better alignments with more accurate statistical estimates. \item A powerful annotation facility. The FASTA programs can incorporate functional site annotations, site variation, and domain-based sub-alignment scoring using annotations from sequence libraries. Scripts are available to download site and domain information from Uniprot, and domain information from Pfam and CATH. Domain information can be used to sub-divide alignment scores to ensure that the aligned domain is homologous. \end{enumerate} In addition, the FASTA programs from \texttt{fasta-36.3.4} on provide an option to produce very BLAST-like output (\texttt{-m BB}), so that analysis pipelines require minimal modification. \section{An overview of the \texttt{FASTA} programs} \begin{table} \caption{\label{table1} Comparison programs in the FASTA36 package} \vspace{0.5ex} \begin{tabular}{ p{0.8in} p{0.6in} p{4.6 in}} \hline \\[-1.0ex] FASTA \mbox{program} & BLAST equiv. & Description \\[1.2ex] \hline \\[-1.0ex] \texttt{fasta36} & \texttt{blastp}/ \texttt{blastn} & Compare a protein sequence to a protein sequence database or a DNA sequence to a DNA sequence database using the FASTA algorithm \cite{wrp881,wrp960}. Search speed and selectivity are controlled with the \emph{ktup}(wordsize) parameter. For protein comparisons, \emph{ktup} = 2 by default; \emph{ktup} =1 is more sensitive but slower. For DNA comparisons, \emph{ktup}=6 by default; \emph{ktup}=3 or \emph{ktup}=4 provides higher sensitivity.\\[1 ex] \texttt{ssearch36} & & Compare a protein sequence to a protein sequence database or a DNA sequence to a DNA sequence database using the Smith-Waterman algorithm \cite{wat815}. \texttt{ssearch36} uses SSE2 acceleration, and is only 2 - 5X slower than \texttt{fasta36} \cite{farrar2007}. \\[1 ex] \texttt{ggsearch36}/ \texttt{glsearch36} & & Compare a protein sequence to a protein sequence database or a DNA sequence to a DNA sequence database using an optimal global:global (\texttt{ggsearch36}) or global:local (\texttt{glsearch36}) algorithm. \texttt{ggsearch36} limits comparisons to sequences that are within 0.8 -- 1.25 the query sequence length, \textit{unless} the \texttt{-M low-high} option is specified on the command line.\\[1 ex] \texttt{fastx36}/ \texttt{fasty36} & \texttt{blastx} & Compare a DNA sequence to a protein sequence database, by comparing the translated DNA sequence in three frames and allowing gaps and frameshifts. \texttt{fastx36} uses a simpler, faster algorithm for alignments that allows frameshifts only between codons; \texttt{fasty36} is slower but can produce better alignments because frameshifts are allowed within codons \cite{wrp971}.\\[1 ex] \texttt{tfastx36}/ \texttt{tfasty36}& \texttt{tblastn} & Compare a protein sequence to a DNA sequence database, calculating similarities with frameshifts to the forward and reverse orientations \cite{wrp971}.\\[1 ex] \texttt{fastf36/ tfastf36} & & Compares an ordered peptide mixture, as would be obtained by Edman degradation of a CNBr cleavage of a protein, against a protein (\texttt{fastf}) or DNA (\texttt{tfastf}) database \cite{wrp021}.\\[1 ex] \texttt{fastm36/ tfastm36} & & Compares set of ordered short peptide fragments against a protein (\texttt{fastm}) or DNA (\texttt{tfasts}) database \cite{wrp021}. \texttt{fastm36} can also compare ordered oligonucleotides against a DNA sequence database.\\[1 ex] \texttt{fasts36/ tfasts36} & & Compares set of unordered short peptide fragments, as would be obtained from mass-spec. analysis of a protein, against a protein (\texttt{fasts}) or DNA (\texttt{tfasts}) database \cite{wrp021}.\\[1 ex] \texttt{lalign36} & & Calculate multiple, non-intersecting alignments using the sim2 implementation of the Waterman-Eggert algorithm\cite{wat875} developed by Xiaoqui Huang and Web Miller\cite{mil908}. Statistical estimates are calculated from Smith-Waterman scores of shuffled sequences. \\[1 ex] \texttt{psisearch2} & \texttt{psiblast} & An improved version of \texttt{psiblast} with options to reduce alignment over-extension.\cite{wrp103,wrp171}\\[1 ex] \hline \\ \end{tabular} \end{table} Although there are a large number of programs in this package, they belong to three groups: (1) Traditional similarity searching programs: \texttt{fasta36}, \texttt{fastx36}, \texttt{fasty36}, \texttt{tfastx36}, \texttt{tfasty36}, \texttt{ssearch36}, \texttt{ggsearch36}, and \texttt{glsearch36}; (2) Programs for searching with short fragments: \texttt{fasts36}, \texttt{fastf36}, \texttt{tfasts36}, \texttt{tfastf36}, and \texttt{fastm36}; (3) A program for finding non-overlapping local alignments: \texttt{lalign36}. Programs that start with \texttt{fast} search protein databases, while \texttt{tfast} programs search translated DNA databases. Table \ref{table1} gives a brief description of the programs. In addition, there are several programs included. \texttt{map\_db} is used to index FASTA format sequence databases for more efficient scanning. \texttt{scripts/lav2plt.pl} can plot the \texttt{.lav} files produced by \texttt{lalign -m 11} as postscript (\texttt{lav2plt.pl --dev ps}) or SVG (\texttt{lav2plt.pl --dev svg}) output. \section{Using the FASTA Package} \subsection{Introduction/Overview} All the FASTA sequence comparison programs use similar command line options and arguments. The simplest command line arguments are (in order): the name of a query sequence file, a library file, and (possibly) the \emph{ktup} parameter. If command line options are provided, they \emph{must} precede the standard query-file and library-file arguments. Thus: \begin{quote} \texttt{fasta36 -s BP62 query.file library.file} \end{quote} will compare the sequences in \texttt{query.file} with those in \texttt{library.file} using the \texttt{BLOSUM62} scoring matrix with BLASTP gap penalties (\texttt{-11/-1}). The program can also be run by typing: \begin{quote} \texttt{fasta36 -I} \end{quote} which presents the ``classic'' interative mode (this was the default behavior before version \texttt{36.3.4}). In interactive mode, you will be prompted for: (1) the name of the test sequence file; (2) the name of the library file; (3) whether you want ktup = 1 or 2. ( 1 -- 6 for DNA sequences). Current versions of the FASTA programs expect a query file and library, if you simply type ``\texttt{fasta36}'', you will see a short help message: \begin{footnotesize} \begin{quote} \begin{verbatim} % ssearch36 USAGE ssearch36 [-options] query_file library_file [ktup] ssearch36 -help for a complete option list DESCRIPTION FASTA searches a protein or DNA sequence data bank version: 36.3.8h Aug, 2019 COMMON OPTIONS (options must preceed query_file library_file) -s: scoring matrix; -f: gap-open penalty; -g: gap-extension penalty; -S filter lowercase (seg) residues; -b: high scores reported (limited by -E by default); -d: number of alignments shown (limited by -E by default); -I interactive mode; \end{verbatim} \end{quote} \end{footnotesize} ``\texttt{fasta36 -help}'' (or any of the other program names in Table I) provides complete listing of the options available for the program and their default values. The package includes several test files. To check to make certain that everything is working, you can try: \begin{quote} \begin{verbatim} fasta36 ../seq/musplfm.aa ../seq/prot_test.lib or tfastx36 ../seq/mgstm1.aa ../seq/gst.nlib \end{verbatim} \end{quote} \subsection{Sequence files} The \texttt{fasta36} programs can read query and library files in many standard formats (Section \ref{fastlibs}). The default file format for query and library files -- the format that will be used if no additional file format information is provided -- is \texttt{FASTA} format. Like \texttt{BLAST}, version 36 can compare a query file with multiple query sequences to a sequence database, performing an independent search with each sequence in the query file. FASTA format files consist of a description line, beginning with a '$>$' character, followed by the sequence itself: \begin{quote} \begin{verbatim} >sequence_name1 and description A F A S Y T .... actual sequence. F S S .... second line of sequence. >sequence_name2 and description PMILTYV ... sequence 2 \end{verbatim} \end{quote} All of the characters of the description line are read, and special characters can be used to indicate additional information about the sequence. In particular, a \texttt{'@:C 12345'} at the end of the description line indicates that the first residue of the sequence has coordinate \texttt{'12345'}, instead of starting at \texttt{'1'}. Coordinates can be negative; a DNA sequence upstream from the start of transcription could be displayed with negative coordinates. In general, non-amino-acid/non-nucleotide sequences in the sequence lines are ignored, with the exception of \texttt{'*'}, which indicates a termination codon in a protein sequence, and can be used to indicate the match to a termination codon in protein:DNA alignments. FASTA format files from major sequence distributors, like the NCBI and EBI, have specially formatted description lines, e.g.:\\ \indent \texttt{ >np\_12345| example NCBI refseq sequence\\ } or\\ \indent \texttt{ >sp:gstm1\_human P01234 glutathione transferase GSTM1 - human\\ } or \indent \texttt{ >sp|P09488|GSTM1\_HUMAN glutathione transferase GSTM1 - human\\ } Several sample test files are included with the FASTA distribution: \texttt{seq/*.aa} and \texttt{seq/*.seq}, as well as two small sequence libraries, \texttt{seq/prot\_test.lib} and \texttt{seq/gst.nlib}. You can build your own library by concatenating several sequence files. Just be sure that each sequence is preceded by a line beginning with a '\texttt{>}' followed by a sequence name/description. Sequences entered with word processors should use a ``text'' mode, e.g. ``Save as text'' with MS-WORD, with end of line characters and no special formatting characters in the file. The FASTA program cannot read Microsoft Word .DOC files, or rich text (.RTF) files; query and library sequence files should contain only sequence descriptions, sequences, and end-of-line characters. \subsection{Running the programs} As mentioned earlier, the FASTA programs can be run either interactively, by typing the name of a FASTA program (and possibly command line options), followed by \texttt{-I} (\texttt{fasta36 -I}) or from the command line, entering command line options, and the query and library file names. For searches of large databases that may take several minutes (or longer), it is more convenient to run searches from the command line, e.g.: \begin{quote} \begin{verbatim} fasta36 query.file library.file > output.file \end{verbatim} \end{quote} The command line shown above could be typed in a Unix or MacOSX terminal window, or from the MS-Windows command line interface (command.exe). The command line syntax shown above works for all the FASTA programs, e.g.: \begin{quote} \begin{verbatim} lalign36 mchu.aa mchu.aa > mchu.laln fastx36 mgstm1.seq prot_test.lseg > mgstm1.fx_out ssearch36 mgstm1.aa xurtg.aa > mgstm1_xurtg.ss \end{verbatim} \end{quote} \emph{Command line options} -- The FASTA programs provide a variety of command line options that modify the default scoring matrix (\texttt{-sBL62}) and gap penalties (\texttt{-f -11}, \texttt{-g -1}), other algorithm parameters, the output options (\texttt{-E 0.1}, \texttt{-d 20}, \texttt{-m 9i}), and statistical procedures (\texttt{z -2}). A complete list of command line options is shown near the end of this document. Unlike the \texttt{BLAST} programs, all \texttt{FASTA} command line options must precede the query file name and library file name (and there are no command line options available to specify the query and library file names). Thus, you should type: \begin{quote} \begin{verbatim} ssearch36 -s BL62 -f -11 -g -1 query.file library.file > output.file \end{verbatim} \end{quote} If you include \texttt{-I} as one of the options, you can provide command line options (e.g. to change the scoring matrix or gap penalties) without a query file or library file, and the program will use the options but prompt for the necessary files . \subsection{Interpreting the results} Fig. \ref{ssearch_run} shows the output from a typical FASTA program (\texttt{ssearch36}). The output file can be viewed as four parts: (a) the initial command line and description of the query sequence used (mgstm1.aa, 218 aa) and library (PIR1, 13,143 entries); (b) a description of the search statistics, algorithm (Smith-Waterman, SSE2 accelerated), and search parameters (BLOSUM50 matrix, gap penalties: -10 to open a gap, -2 for each residue in a gap); (c) a list of high scoring library sequences, descriptions, similarity scores, and statistical significance; (d) the alignments that produced the scores. \begin{figure} \include{fasta_guide.fg1} \caption{\label{ssearch_run}\texttt{ssearch36} results} \vspace{1.0ex} Comparison of \texttt{seq/mgstm1.aa} against a small protein database (\texttt{pir1.lseg}). Some high-scoring sequences and all but one alignment were removed to reduce the output size. \end{figure} \subsubsection{Identifying homologs} In the description section (which starts: \texttt{The best scores are:}), four numbers after the description of each library sequence are shown: (i) (in parentheses) the length of the library sequence; (ii) the raw Smith-Waterman score for the alignment (\texttt{s-w}; for the \texttt{fasta36}, \texttt{[t]fast[x,y]36} programs, this column would be labeled \texttt{opt}, for the \emph{opt}imized -- banded Smith-Waterman -- score), (iii) the \emph{bit} score, and (iv) the expectation (E()), or statistical significance, of the alignment score. The E()-value depends on the size of the database searched, in this case, 13,143 sequences, so the database size is given at the top of the list. The bit score is equivalent to a BLAST bit score; together with the length of query and library sequences, it can be used to calculate the significance of the alignment.\footnote{$E(D) = D m n 2^{-b}$, where $D$ is the number of sequences in the database, $m, n$ are the lengths of the two sequences, and $b$ is the bit score.} Bit scores are convenient because they provide a matrix independent score that can be compared with other searches performed with other matrices and gap penalties against other databases. However, the E()-value, or expectation, provides the most direct measure of the statistical significance of the match. In this example, the \texttt{GSTP1\_RAT}, \texttt{GSTA1\_RAT}, and \texttt{GSTA4\_RAT} proteins share strong significant similarity (better than $E() < 6.1 \times 10^{-7}$ ), while the \texttt{GSTF1\_MAIZE}, \texttt{GSTF3\_MAIZE}, and \texttt{GSTT1\_DROME} sequences do not share significant similarity ($E() < 0.001$). However, \texttt{GSTF1\_MAIZE}, \texttt{GSTF3\_MAIZE}, and \texttt{GSTT1\_DROME} are all glutathione transferase homologs, they simply do not share statistically significant similarity with this particular \texttt{mGSTM1} query. Statistically significant sequence similarity scores \emph{can} be used to infer \emph{homology} (common ancestry), but non-significant scores \emph{cannot} be used to infer \emph{non-homology}. While percent identity is often used to characterize the quality of an alignment and the likelihood that it reflects homology, the E()-value is a much more reliable value for homology infernence (once homology is established, the percent identity is much more useful for estimating evolutionary distance). Often sequences that share less than 30\% identity will share very significant similarity (in the example above \texttt{mgstm1.aa} and \texttt{GSTA4\_RAT}, with E() $<$ 6.1E-07 are 25.6\% identical). The expectation value captures information about conservative replacements, identities, and alignment length to provide a \emph{single} value that captures the significance of the alignment. For protein searches, library sequences with E()-values $<$ 0.001 for searches of a 10,000 entry protein database are almost always homologous. Some sequences with E()-values from 1 - 10 may also be related, but unrelated sequences ( 1--10 per search) will have scores in this range as well. E()-values $<$ 0.001 can reliably be used to infer homology, assuming that the statistical estimates are accurate. The two most common causes of statistical problems are low-complexity regions and amino-acid composition bias. Low-complexity regions are can be identified using the \texttt{pseg} program \cite{woo935}, and filtered out using the \texttt{-S} option. Composition bias rarely produces highly-signficiant E()-values, but can cause unrelated sequences to have E()-values between 0.01 and 0.001. The FASTA programs offer two shuffle-based strategies for evaluating composition bias; calculating similarity scores for random sequences with the same length and amino acid composition (\texttt{-z 11} $..$ \texttt{16}),\footnote{Random shuffles are performed for pairwise alignments and \texttt{lalign36} by default.} and calculating statistical estimates derived from shuffles of the high-scoring sequences (\texttt{-z 21, 22, 24, 25, 26}). When \texttt{-z 21 .. 26} shuffles are performed, the FASTA36 programs present two E()-values in the list of high scoring sequences and the alignments; the traditional one based on the library search, and a second \texttt{E2()} value, based on the shuffles of the high scoring sequences. \texttt{-z 21 .. 26} shuffles are most useful for evaluating the significance of translated-DNA:protein searches like \texttt{fastx36}. Out-of-frame translations can produce cryptic low complexity regions, which are most apparent when the high-scoring sequences are shuffled. \texttt{-z 21} shuffles are more efficient than individual sequence shuffles, because the set of high scoring sequences is shuffled 500 -- 1,000 times, rather than 500 shuffles for each of 50 -- 100 high scoring library sequences. It is almost as effective, because homologous sequences share similar amino-acid composition. The statistical routines assume that the library contains a large sample of unrelated sequences. If the library contains fewer than 500 sequences (\texttt{MAX\_RSTATS}), then the library sequences are shuffled to produce 500 random scores, from which lambda and K statistical parameters are estimated. If the library contains a large number of \emph{related} sequences, then the statistical parameters should be estimated by using the \texttt{-z 11-15}, options. \texttt{-z} options greater than 10 calculate a shuffled similarity score for each library sequence, in addition to the unshuffled score, and estimate the statistical parameters from the scores of the shuffled sequences. \subsubsection{Looking at alignments} The description section described above contains the critical information for inferring homology, the \texttt{E()}-value. The alignment section shows the actual alignments that produced the similarity score and statistical estimates. In Fig. \ref{ssearch_run}, the alignment display reports the percent identity, percent similarity (number of aligned residues with BLOSUM50 values $\ge$ 0), and the boundaries of the alignment. Note that for the \texttt{ssearch36} and \texttt{fasta36}, the alignment shown can include residues that are not part of the best local alignment (e.g. residues 1--5 and 207--218 in \texttt{mGSTM1} in Fig. \ref{ssearch_run}). The amount of additional sequence context shown is the alignment line length (60 residues, set by \texttt{-w len}) divided by 2 by default, but can be adjusted with the \texttt{-W context} option. \begin{figure} \include{fasta_guide.fg2} \vspace{-3.0ex} \caption{\label{seg-aln}Alignment with \texttt{-S} filtered sequence} \end{figure} Fig. \ref{seg-aln} shows an example of a \texttt{fasta36} alignment produced using the \texttt{-S} option to filter out lower-case (low complexity) residues. Here, additional scores (\texttt{initn}, \texttt{init1} are shown, in addition to the \texttt{opt} score which is used to rank the sequences and calculate statistical significance. The \texttt{init1} score is the highest scoring alignment without gaps; \texttt{initn} is a score that combines consistent (non-overlapping) runs without gaps, and \texttt{opt} is the score of a banded Smith-Waterman of width 16 for \emph{ktup=2} that is applied to sequences with \texttt{initn} scores over the optimization threshold. In Fig. \ref{seg-aln}, the \texttt{init1} score is based on the long, un-gapped region from residues 46--208 in \texttt{mGSTM1}, while the \texttt{initn} and \texttt{opt} scores include the other regions joined by gaps. The \texttt{initn} score is higher than the \texttt{opt} score, because it uses a simpler, length-independent, gap penalty. The \texttt{init1} and \texttt{initn} scores are shown for historical reasons, and can be used to illustrate the FASTA algorithm. But the \texttt{opt} score is the most reliable and sensitive score for inferring homology; the others can be ignored. For \texttt{fasta36} with proteins, the final alignment and score is calculated with the Smith-Waterman algorithm. For DNA sequences, a banded Smith-Waterman is used. (The \texttt{-A} option produces banded Smith-Waterman alignments for proteins, and full Smith-Waterman for DNA.) In Fig. \ref{seg-aln}, the \texttt{opt} score and \texttt{Smith-Waterman} scores are calculated on exactly the same alignment, but the \texttt{opt} score excludes the contribution from the ``low-complexity'' region between 19--30 in \texttt{GST26\_SCHMA}. \subsubsection{Results without alignments} While sequence alignments are very informative, it is often not practical to examine all the statistically significant alignments in large-scale searches. The \texttt{-m 9} and \texttt{-m 8} options present summaries of each alignment (alignment boundaries, percent identity, and other information) in a much more compact form. \texttt{-m 9i} adds three columns to the summary report line, the fraction identical, fraction similar, and alignment length (in addition, variants are reported if they affect identity). \texttt{-m 9I} is similar to \texttt{-m 9i}, but also reports domain content if annotations are used. \texttt{-m 9c} or \texttt{-m 9C} (see options below) provide a detailed encoding of the alignment, that allows it to be reconstructed. For large-scale searches, we routinely use \texttt{-m 8} with the \texttt{-d 0} option, which sets the number of alignments shown to 0 (thus none are shown). Alternatively, the \texttt{-m 8} and \texttt{-m 8C} ouput options produce BLAST-format tabular results summaries (\texttt{-m 8C} provides commented tabular results). \texttt{-m 8CC} adds an alignment CIGAR string and annotation string to the BLAST tabular format. \texttt{-m BB} produces an output that mimics BLAST output (with alignments). \subsubsection{Alignments with annotations} The command line \texttt{-V} option (described below) causes the FASTA programs to ``decorate'' its sequence alignments with annotation information, such as functional sites, variants, and domain-based sub-alignment scores. For example, a comparison of the \texttt{seqs/gstm1\_human.vaa} sequence with SwissProt using the \texttt{scripts/ann\_feats\_up\_www2.pl} script: \begin{footnotesize} \begin{quote} \begin{verbatim} ssearch36 -m 9i -V \!../scripts/ann_feats_up_www2.pl ../seq/gstm1\_human.vaa /slib/swissprot.fa \end{verbatim} \end{quote} \end{footnotesize} Produces the following addtional output: \begin{footnotesize} \begin{verbatim} Annotation symbols: = : Active site * : Modified # : Substrate binding ^ : Metal binding @ : Site The best scores are: s-w bits E(458668) %_id %_sim alen sp|P09488.3|GSTM1_HUMAN Glutathione ( 218) 1500 375.2 2.4e-103 1.000 1.000 218 K173N;S210T; sp|Q03013.3|GSTM4_HUMAN Glutathione ( 218) 1375 344.5 4.4e-94 0.904 0.963 218 S2P;A160V;L208V;Y209F;R211K;V212M; sp|Q5R8E8.3|GSTM2_PONAB Glutathione ( 218) 1310 328.5 2.9e-89 0.862 0.959 218 sp|Q9TSM5.3|GSTM1_MACFA Glutathione ( 218) 1308 328.0 4e-89 0.858 0.954 218 sp|Q9TSM4.3|GSTM2_MACFA Glutathione ( 218) 1307 327.7 4.8e-89 0.862 0.954 218 sp|P28161.2|GSTM2_HUMAN Glutathione ( 218) 1306 327.5 5.7e-89 0.853 0.959 218 S173N; sp|P46439.3|GSTM5_HUMAN Glutathione ( 218) 1305 327.2 6.7e-89 0.876 0.954 218 L179P; \end{verbatim} \end{footnotesize} This summary of high scoring hits shows one of the effects of annotation---substitution of variant residues to increase the score. In this case, the query sequence \texttt{gstm1\_human.vaa} is a known variant of the canonical \texttt{GSTM1\_HUMAN}/\texttt{P09488} UniProt sequence. Without the \texttt{-V} annotation option, \texttt{gstm1\_human.vaa} would be 99\% identical to \texttt{GSTM1\_HUMAN}, but because UniProt documents the variant residues in the feature table, the \texttt{K173N} and \texttt{S210T} substutions are made in the library (subject) sequence, producing a perfect match. In addition to the variant substitution shown above, the alignments provide a more complete view of the annotations available on the library (subject) proteins. Below is the report for the \texttt{GSTM4\_HUMAN} alignment: \begin{footnotesize} \begin{quote} \begin{verbatim} >>sp|Q03013.3|GSTM4_HUMAN Glutathione S-trans (218 aa) Variant: 2P=2P : S2P : UniProtKB FT ID: VAR_033979 Site:@ : 7Y=7Y : Site: Glutathione binding Site:@ : 46W=46W : Site: Glutathione binding Site:@ : 59N=59N : Site: Glutathione binding Site:@ : 72Q=72Q : Site: Glutathione binding Region: 2-88:2-88 : score=599; bits=150.1; Id=0.989; Q=415.2 : GST N-terminal :1 Site:# : 116Y=116Y : Substrate binding: Substrate Variant: 160V=160V : A160V : UniProtKB FT ID: VAR_033980 Variant: 208V=208V : L208V : UniProtKB FT ID: VAR_049487 Region: 90-208:90-208 : score=699; bits=175.1; Id=0.833; Q=489.3 : GST C-terminal :2 Variant: 209F=209F : Y209F : UniProtKB FT ID: VAR_049488 Variant: 211K=211K : R211K : UniProtKB FT ID: VAR_049489 Variant: 212M=212M : V212M : UniProtKB FT ID: VAR_049490 s-w opt: 1375 Z-score: 1823.2 bits: 344.5 E(458668): 4.4e-94 Smith-Waterman score: 1375; 90.4% identity (96.3% similar) in 218 aa overlap (1-218:1-218) \end{verbatim} \end{quote} \end{footnotesize} This report can be broken into three parts: (1) information on variants, described above, (2) information on annotated sites, and (3) information on annotated domains. For each annotated site, the coordinate and amino-acid resdiue in the query and library (subject) sequence is shown, as well as the conservation state (\texttt{=} in all these examples). For annotated domains, the overall alignment score is broken into pieces, based on the boundaries of the domains. In this case, the full alignment extends from residues 1--218, producing a raw Smith-Waterman score of 1375 and a bit score of 344.5. The GST N-terminal domain is annotated from residue 2--88 on \texttt{GSTM4\_HUMAN}, and the 2--88 region of the alignment produces a score of 599 and bit score of 150.1. This region is 98.9\% identical, and the probability of that similarity score is $10^{-41.52}$ (the Qvalue score is $-10 log_{10} P$). The alignment associated with GST C-terminal domain is slightly less well conserved (83.3\% identical), but longer, so it produces a higher Smith-Waterman score (699), bit score (175.1) and Q-value. Sub-alignment scores can be used to identify cases of alignment over-extension \cite{wrp136}, where an alignment extends well beyond the homologous domain. In this case, the homologous region will produce the vast majority of the score, and the non-homologous over-extension will produce very little score. For example, when \texttt{SRC8\_HUMAN} aligns with \texttt{LASP1\_MOUSE}, the alignment spans 200 residues, but only about 49 of those residues, an \texttt{SH3} domain, are homologous: \begin{footnotesize} \begin{quote} \begin{verbatim} >>sp|Q61792.1|LASP1_MOUSE LIM and SH3 domain protein 1; LASP-1; (263 aa) Region: 369-398:66-95 : score=20; bits=13.7; Id=0.200; Q=0.0 : Nebulin_repeat InterPro Region: 400-434:97-131 : score=-8; bits=8.7; Id=0.150; Q=0.0 : Nebulin_repeat InterPro Region: 435-499:132-203 : score=13; bits=11.4; Id=0.197; Q=0.0 : NODOM :0 Region: 499-547:204-261 : score=124; bits=47.8; Id=0.474; Q=92.1 : SH3 InterPro s-w opt: 148 Z-score: 253.4 bits: 55.6 E(459565): 1.2e-06 Smith-Waterman score: 159; 26.3% identity (55.6% similar) in 205 aa overlap (369-547:66-261) \end{verbatim} \end{quote} \end{footnotesize} The 150 aligned residues outside the \texttt{SH3} homology produce less than 20\% of the alignment score, while spannign to non-homologous Nebulin repeat domains. \subsection{Program Options} Command line options are available to change the scoring parameters and output display. Unlike the NCBI BLAST programs, command line options \emph{must} precede the query file name and library file name arguments. To see the command-line options for a program and their defaults, type \texttt{program\_name -help}, e.g. \texttt{fasta36 -help} or \texttt{ssearch36 -help}. For a quick list of the most common options, just type the program name without any options (e.g. \texttt{fasta36$<$ret$>$}). \subsubsection{Command line options} \begin{description} \item[\texttt{-a}] (\texttt{fasta36}, \texttt{ssearch36}, \texttt{glsearch36}, \texttt{fasts36}) show both sequences in their entirety. \item[\texttt{-A}] force Smith-Waterman alignments for \texttt{fasta36} DNA sequences. By default, only \texttt{fasta36} protein sequence comparisons use Smith-Waterman alignments. Likewise, for proteins, use band alignments (Smith-Waterman is used by default). \item[\texttt{-b \#}] Number of sequence scores to be shown on output. In the absence of this option, \texttt{fasta36} (and \texttt{ssearch36}) display all library sequences obtaining similarity scores with expectations less than the expectation (-E) threshold, 10.0 for proteins, and 2.0 for DNA:DNA and protein:translated DNA. The \texttt{-b \#} option can limit the display further. There are two ``sub-modes'' of \texttt{-b}. \texttt{-b =100} will force 100 high scores to be displayed, regardless of the expectation (\texttt{-E}) threshold, and \texttt{-b >1} will show at least \texttt{1}, but is otherwise limited by \texttt{-E}. Thus, \texttt{-b 10} will show \emph{no more than} 10 results, limited by \texttt{-E}; \texttt{-b =10} will always show \emph{exactly} \texttt{10} results, and \texttt{-b >5} will show \emph{at least} \texttt{5} results, but could show many more if more results have e\-values $\le$ \texttt{-E e\_cut}. \item[\texttt{-c \#,\#}] (\texttt{fasta36}, \texttt{[t]fast[x,y]36} only) Fraction of alignments optimized (second value is fraction of sequences joined). FASTA36 uses a statistical threshold strategy that joins and optimizes only the fraction of the alignments with an \texttt{initn} score expected \texttt{-c} times. Thus, \texttt{-c 0.05} should optimize about 5\% of sequences. The actual number of sequences optimized (and joined) is displayed in the scoring parameters line. Thus: \begin{quote} \begin{verbatim} Parameters: BL50 matrix (15:-5), open/ext: -10/-2 ktup: 2, E-join: 1 (0.687), E-opt: 0.2 (0.294), width: 16 \end{verbatim} \end{quote} reports that 20\% of the sequences in the database should have been band-optimized, and 29.4\% were. Reducing the \texttt{-c opt} fraction improves performance, but dropping the fraction below 0.02 can reduce the accuracy of the statistical estimates. \texttt{-c O} (letter 'O') sets the joining/optimization thresholds as they were prior to \texttt{fasta-36.3.3} (original thresholds). Positive values set the thresholds to specific score values, as was the case in older versions of \texttt{fasta}. \item[\texttt{-C}] length of the sequence name printed at the beginning of alignment lines (default 6 characters). \item[\texttt{-d \#}] Maximum number of alignments to be displayed (must be \texttt{<=} to the number of descriptions, \texttt{-b \#}) \item[\texttt{-D}] Provide some debugging output. Used in conjunction with the \texttt{-e expand\_script.sh}, the \texttt{link\_acc\_file} and \texttt{link\_lib\_file} are not deleted during the run; so that \texttt{expand\_script.sh} scripts can be tested. \item[\texttt{-e expand\_script.sh}] Expand the set of sequences that are aligned to beyond the set of sequences searched. When the \texttt{-e expand\_script.sh} option is used, the \texttt{expand\_script.sh} script is run after the initial search scan but before the list of high-scoring sequences is displayed. \texttt{expand\_script.sh} is given a single argument, the name of a file that contains a list of accession strings (the text between the \texttt{>} and the first space ('\textvisiblespace') character followed by the E()-value for the sequence (separated by a \texttt{} character), e.g.: \begin{quote} \begin{verbatim} sp|P08010|GSTM2_RAT2.69e-86 sp|P09211|GSTP1_HUMAN1.51e-20 sp|P04906|GSTP1_RAT1.16e-19 sp|P00502|GSTA1_RAT9.5e-12 \end{verbatim} \end{quote} The script should produce a fasta-formatted list of additional sequences printed to \texttt{stdout}. The script is run with the command: \begin{quote} \begin{verbatim} expand_script.sh link_acc.tmp_file > link_lib.tmp_file \end{verbatim} \end{quote} The sequences in \texttt{link\_lib.tmp\_file} (a temporary file name is actually used, and the file is deleted unless the \texttt{-D} option is used) are then compared and, if they are significant, included in the list of high scoring sequences and the alignments. The expanded set of sequences does not change the database size or statisical parameters, it simply expands the set of high-scoring sequences. The \texttt{fasta36/misc} directory contains \texttt{expand\_uniref50.pl} that uses a mySQL table based on the \texttt{uniref50} clusters. Using the script and the \texttt{uniref50} cluster information, one can search \texttt{uniref50.fasta}, but then expand the hits so that \texttt{uniprot} appears to be searched. \item[\texttt{-E e\_cut [e\_cut\_r]}] Limit the number of scores and alignments shown based on the expected number of scores. Used to override the expectation value of 10.0 (protein:protein; 5.0 translated-DNA:protein; 2.0 DNA:DNA) used by default. \texttt{-E 2.0} will show all library sequences with scores with an expectation value $<=$ 2.0. With \texttt{fasta-36}, a second value, \texttt{e\_cut\_r} is available to limit the E()-values of additional sequence alignments between the query and library sequences. If not given, the threshold is \texttt{e\_cut}/10.0. If given with a value $>$ 1.0, \texttt{e\_cut\_r} = \texttt{e\_cut} / value; for a value $<$ 1.0, \texttt{e\_cut\_r} = value; If \texttt{e\_cut\_r} $<$ 0, then the additional alignment option is disabled. \item[\texttt{-f \#}] Gap open penalty (-10 by default for proteins, -12 for DNA, -12 for \texttt{[t]fast[xy]}). \item[\texttt{-F \#}] Limit the number of scores and alignments shown based on the expected number of scores. \texttt{-E \#} sets the highest E()-value shown; \texttt{-F \#} sets the lowest E()-value displayed. Thus, \mbox{\texttt{-F 0.0001}} will not show any matches or alignments with E() $<$ 0.0001. This allows one to skip over close relationships to search for more distant relationships. \item[\texttt{-g \#}] Penalty per residue in a gap (-2 by default for proteins, -4 for DNA, -2 for \texttt{[t]fast[xy]}). A single residue gap costs \texttt{f} $+$ \texttt{g}. \item[\texttt{-h}] Short help message. Help options with \texttt{':'}, e.g. \texttt{-s:}, require an argument (\texttt{-s BP62}). Defaults are shown in square brackets, e.g.: \texttt{-s:\ [BL50]}. \item[\texttt{-help}] Long help message \item[\texttt{-H}] Show histogram. \item[\texttt{-i}] DNA queries - search with reverse complement. For \texttt{tfastx36/y36}, search the reverse complement of the library sequence only (complement of \texttt{-3} option). \item[\texttt{-I}] Interactive mode (the default for versions older than \texttt{fasta-36.3.4}). \item[\texttt{-j \#}] Penalty for frameshift between codons (\texttt{[t]fastx36}, \texttt{[t]fasty36}) and within a codon (\texttt{fasty36}/ \texttt{tfasty36} only). \item[\texttt{-J}] (\texttt{lalign36} only) show the identity alignment (normally suppressed, \texttt{-I} in versions before \texttt{fasta-36.3.4}). \item[\texttt{-k \#}] number of shuffles for statistical estimates from shuffling. \item[\texttt{-l file}] Location of library menu file (FASTLIBS). \item[\texttt{-L}] Display longer library sequence description. \item[\texttt{-M low-high}] Range of amino acid sequence lengths to be included in the search. This option \textit{excludes} library (subject) sequences outside of the specified range. In addition, it can be used to \textit{include} library sequences that would not normally be aligned by \texttt{ggsearch}, because \texttt{ggsearch} assumes that for global alignments, the two sequences should be approximately the same length (between 0.75 and 1.33 the query sequence length). Setting \texttt{-M 1-100000} removes the library sequence length filter for \texttt{ggsearch}. \item[\texttt{-m \#}] Specify alignment type: 0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, B, BB, ``F\# out\_file'' \begin{small} \begin{verbatim} -m 0 -m 1 -m 2 -m 3 -m 4 MWRTCGPPYT MWRTCGPPYT MWRTCGPPYT MWRTCGPPYT ::..:: ::: xx X ..KS..Y... MWKSCGYPYT ---------- MWKSCGYPYT MWKSCGYPYT \end{verbatim} \end{small} If the \texttt{-V '*@\%'} annotation option has been used, annotations can be included in either the coordinate line (the default) or the middle alignment line (\texttt{-m 0M}, \texttt{-m 1M}), or both (\texttt{-m 0B}, \texttt{-m 1B}). See \texttt{-V} for more details. \indent \texttt{-m 5}: a combination of \texttt{-m 4} and \texttt{-m 0}. \texttt{-m 6} provides \texttt{-m 5} plus HTML formatting. In addition, independent \texttt{-m} options can be combined. Thus, one can use \texttt{-m 1 -m 6 -m 9}. \item[\texttt{-m 8}] provides BLAST tabular format output (a tab delimited line with the query name, library name, percent identity, and other alignment information). ``\texttt{-m 8C}'' provides the additional information provided by the BLAST tabular format with comment lines. BLAST tabular format has been extended to include either a CIGAR string alignment encoding (\texttt{-m 8CC} with BLAST comments, \texttt{-m 8XC} without comments) and, if available, an annotation encoding matching FASTA \texttt{-m 9C} output. \texttt{-m 8CB} provides the BLAST BTOP encoding, rather than the CIGAR encoding provided by \texttt{-m 8CC}. All the \texttt{-m 9c/C/d/D} encodings are available with BLAST tabular output using \texttt{-m 8C[c/C/d/D]}. In addition to the BLAST BTOP/CIGAR encoding field added with \texttt{-m 8CB/8CC}, a second additional annotation field is added if annotations are available. The annotation field provides the same annotation boundary and score information as in standard alignment, but in a more compact form: \begin{verbatim} |RX:3-82:3-82:s=780;b=201.;I=0.866;Q=570.;C=C.Thio|XR:3-82:3-82:s=780;b=201.;I=0.866;Q=570.5;C=C.Thio... \end{verbatim} \texttt{|RX} annotations are based on the query sequence; \texttt{|XR} on the subject. In the example above, the boundaries of the domain in the query and subject are shown (\texttt{3-82:3-82}, as well as the raw score, bit-score, identity, Q-score, and domain name. In the v36.3.8h release, new options have been added to \texttt{-m 8CB}: (a) \texttt{-m 8CBl} to show the query and subject sequence lengths; (b) \texttt{-m8CBs} to show percent similarity in addition to percent identity; (c) \texttt{-m8CBd} adds an additional output field that shows raw domain information. \texttt{-m8CBL} provides both query/subject sequence lengths and raw domain informatio. The \texttt{- m8CBl} option adds the lengths of the query and subject sequences after the \texttt{seqid}'s to BLAST tabular output, e.g. \texttt{qseqid qlen sseqid slen percid ...} \texttt{-m 8CBs}. The \texttt{- m8CBs} includes percent similarity after percent identity, e.g. \texttt{qseqid, sseqid \% identity, \% similar, ... } \texttt{-m 8CBd} adds a new field with the raw domain coordinate information for the query and subject, with \texttt{DX/XD} used to indicate the domains. \texttt{-m 8CBL} provides both query/subject lengths and raw domain information. \begin{verbatim} |DX:3-82;C=C.Thio|DX:105-201;C=C.GST_C|XD:3-82;C=C.Thio|XD:105-201;C=C.GST_C \end{verbatim} \texttt(-m 8CBr) (v36.3.8i release, 14-Nov-2022) adds a new field with the raw optimal alignment score (typically Smith-Waterman for proteins). These \texttt{-m 8CB} options, \texttt{'l/L'}, \texttt{'s'}, \texttt{'d'}, and \texttt{'r'} can be combined in any order. \item[\texttt{-m 9}] display alignment coordinates and scores with the best score information. \texttt{-m 9i} provides alignment length, percent identity, and percent similarity only. \texttt{-m 9i} also provides variation information if it improves the score. \texttt{-m 9I} provides both identity and domain information on the summary line. \texttt{ -m 9, -m 9c} and \texttt{-m 9C} extend the normal best score information: \begin{footnotesize} \begin{verbatim} The best scores are: opt bits E(14548) XURTG4 glutathione transferase (EC 2.5.1.18) 4 - ( 219) 1248 291.7 1.1e-79 \end{verbatim} \end{footnotesize} to include the additional information (on the same line, separated by $<$tab$>$ characters): \begin{footnotesize} \begin{verbatim} %_id %_gid sw alen an0 ax0 pn0 px0 an1 ax1 pn1 px1 gapq gapl fs 0.771 0.771 1248 218 1 218 1 218 1 218 1 219 0 0 0 \end{verbatim} \end{footnotesize} The first two values are fraction identical and fraction similar (score $\ge 0$), followed by the Smith-Waterman alignment score (\texttt{sw}), the alignment length (\texttt{alen}), and the coordinates of the beginning and end of the alignment in the query and target (library) sequences (\texttt{an0} beginning, \texttt{ax1} end in query; \texttt{an1} beginning, \texttt{ax1} end in target/library), and the coordinate system for the beginning and end of the query and target/library sequence (\texttt{pn0} is the displayed coordinate of the first residue of the query sequence, \texttt{px0} is the displayed coordinate of the last residue, \texttt{pn1},\texttt{px1} provide the coordinates for the target/library sequence). \texttt{gapq}, \texttt{gapl} report the number of gaps in the query and library sequence; \texttt{fs} reports the number of frameshifts. \texttt{ -m 9c} provides additional information: an encoded alignment string. For example, the alignment: \begin{footnotesize} \begin{verbatim} 10 20 30 40 50 60 70 GT8.7 NVRGLTHPIRMLLEYTDSSYDEKRYTMGDAPDFDRSQWLNEKFKL--GLDFPNLPYL-IDGSHKITQ :.:: . :: :: . .::: : .: ::.: .: : ..:.. ::: :..: XURTG NARGRMECIRWLLAAAGVEFDEK---------FIQSPEDLEKLKKDGNLMFDQVPMVEIDG-MKLAQ 20 30 40 50 60 \end{verbatim} \end{footnotesize} would be encoded: \begin{footnotesize} \texttt{=23+9=13-2=10-1=3+1=5} \end{footnotesize}. The numbers in the alignment encoding is with repect to the beginning of the alignment, not the sequences. The beginning coordinate of the alignment is given earlier in the \texttt{-m 9c} line. \texttt{-m 9C} provides the alignment encoding in CIGAR format: \begin{footnotesize} \texttt{28M9D13M2I10M1I3M1D5M} \end{footnotesize}. (June, 2014) The \texttt{-m 9c/C} option has been extended to \texttt{-m 9d/D}, which encodes the positions of mismatches as well as insertions and deletions. For the example above, the \texttt{-m 9d} encoding would be: \begin{footnotesize} \texttt{=1x1=2x4=2x1=2x7=3-9=1x2=1x4=2x1=1x1+2x1=1x1=1x3=1x2+1=3-1x1=1x2=1} \end{footnotesize} while \texttt{-m 9D} would be: \begin{footnotesize} \texttt{1M1X2M4X2M1X2M7X3M9D1M2X1M4X2M1X1M1X2I1X1M1X1M3X1M2X1I3M1D1X1M2X1M} \end{footnotesize} \item[\texttt{-m 10}] a parseable format for use with other programs (this option no longer reliably tested; \texttt{-m 8CBL} is easier to parse and tested more extensively). \item[\texttt{-m 11}] Provide \texttt{lav}-like output (used by \texttt{lalign}) for graphical output. \begin{quote} \texttt{lalign36 -m 11 mchu.aa mchu.aa | lav2plt.pl --dev ps > mchu\_laln.ps} \end{quote} Produces a postscript plot of the local alignments. Likewise, \texttt{lav2plt.pl --dev svg} produces SVG output. \item[\texttt{-m BB}] Format output to mimic BLAST format. \texttt{-m B} formats alignments to look like BLAST alignments (Query/Sbjct), but is FASTA output otherwise. \texttt{-mBB} imitates BLAST as much as possible, and cannot be used with other \texttt{-m} options. \item[\texttt{-m "F\# out.file"}] Send an alternate result format to \texttt{out.file}. Normally, the \texttt{-m out\_fmt} option applies to the default output file, which is either \texttt{stdout}, or specified with \texttt{-O out\_file} (or within the program in interactive mode). With \texttt{-m F}, an output format can be associated with a separate output file, which will contain a complete FASTA program output. Thus, \begin{quote} \begin{small} \begin{verbatim} ssearch36 -m 9c -m "FBB blast.out" -m "F9c,10 m9c_10.out" query library \end{verbatim} \end{small} \end{quote} Sends the \texttt{-m 9c} output to \texttt{stdout}, but will also send \texttt{-m BB} output to the \texttt{blast.out} file, and \texttt{-m 9c -m 10} output to \texttt{m9\_c10.out}. Consistent \texttt{-m out\_fmt} commands can be set to the same file by separating them with ','. Producing alternative format alignments in different files has little additional computational cost. Because a space (\textvisiblespace) is used to separate the output format (\texttt{-m}) values from the file name, the \texttt{-m F} argument must typically be surrounded by quotation marks (\texttt{"}). One of the shortcomings of this approach is that it affects only the output format, not the other options that modify the amount of output. Thus, if you specify \texttt{-E 0.001}; that expect threshold will be used for all the output files. When a \texttt{-m} option does modify the output (e.g. \texttt{-m 8} sets \texttt{-d 0}), that modification is specific to the output file. \item[\texttt{-M low-high}] Include library sequences with lengths between low and high. \item[\texttt{-n}] Force the query sequence to be treated as a DNA sequence. Useful when query sequences contain a large number of ambiguous residues, e.g. transcription factor binding sites. \item[\texttt{-N \#}] break long library sequences into blocks of \# residues. Useful for bacterial genomes, which have only one sequence entry. -N 2000 works well for well for bacterial genomes. (This option was required when FASTA only provided one alignment between the query and library sequence. It is not as useful, now that multiple alignments are available.) \item[\texttt{-o off1,off2}] (Previously \texttt{-X}.) Specifies offsets for the beginning of the query and library sequence. For example, if you are comparing upstream regions for two genes, and the first sequence contains 500 nt of upstream sequence while the second contains 300 nt of upstream sequence, you might try: \begin{quote} \texttt{fasta -o "-500 -300" seq1.nt seq2.nt} \end{quote} If the \texttt{-o} option is not used, FASTA assumes numbering starts with 1. (You should double check to be certain the negative numbering works properly.) \item[\texttt{-O}] Send a copy of results to \texttt{filename}. Helpful for environments without STDOUT, but should be avoided (use \texttt{> filename} instead). \item[\texttt{-p}] Force query to be treated as protein sequence. \item[\texttt{-P PSSM\_file}] Specify a PSI-BLAST format PSSM (Position Specific Scoring Matrix) file. \texttt{ssearch36}, \texttt{ggsearch36}, and \texttt{glsearch36} can use a PSSM file to improve the sensitivity of a search. The FASTA programs accept two PSSM file formats:\\[2ex] \begin{tabular}{l l l} \hline\\[-1.5ex] format & \texttt{blastpgp} & option \\[0.5ex] \hline\\[-1.5ex] 0 & \texttt{blastpgp -C pssm.chk -u 0} & byte-encoded \\ 2 & \texttt{blastpgp -C pssm.asnb -u 2} & binary ASN.1 \\ % & \texttt{psiblast -out\_pssm\_text} \\[1.5ex] \hline\\[-0.5ex] \end{tabular}\\ which can be specified after the file name, e.g.: \begin{quote} \texttt{ssearch36 -P 'pssm.asnb 2' pssm\_query.aa +sp+} \end{quote} Searches with a PSI-BLAST PSSM must still require a query sequence file, and the query sequence file must match the PSSM seed sequence. The format 0 byte-encoded PSSM is machine dependent; it must be created by \texttt{blastpgp} on the same architecture as \texttt{ssearch36}. In general, you should use the binary ASN.1 (format 2) file. With the release of \texttt{NCBI-BLAST+}, \texttt{psiblast} replaces \texttt{blastpgp}, and \texttt{psiblast} does not produce the binary ASN.1 PSSM checkpoint data. However, the text ASN.1 PSSM checkpoint file (produced with the \texttt{psiblast} option \texttt{-out\_pssm}) can be converted to a binary ASN.1 format that \texttt{ssearch36} can read using the NCBI \texttt{datatool} program (available from \url{ftp://ftp.ncbi.nlm.nih.gov/toolbox/ncbi_tools++/BIN/CURRENT/datatool}) together with \url{http://www.ncbi.nlm.nih.gov/data_specs/asn/NCBI_all.asn}. More information about \texttt{datatool} is available from \url{http://www.ncbi.nlm.nih.gov/data_specs/NCBI_data_conversion.html}. The NCBI BLASTP/PSI-BLAST website provides the same PSSM text ASN.1 file with the downloads link. A text ASN.1 PSSM file can be converted to a binary ASN.1 file using the command: \begin{quote} \texttt{datatool -m NCBI\_all.asn -v pssm.asn\_txt -e pssm.asnb} \end{quote} The \texttt{pssm.asnb} can then be used with \texttt{ssearch36} with the \texttt{-P 'pssm.asnb 2'} option shown above. \item[\texttt{-Q,-q}] Quiet - does not prompt for any input. Writes scores and alignments to the terminal or standard output file (on by default, turned off with \texttt{-I}). \item[\texttt{-r +n/-m}] Specify match/mismatch scores for DNA comparisons. The default is \texttt{+5/-4}. \texttt{+3/-2} can perform better in some cases. \item[\texttt{-R file}] Save a results summary line for every sequence in the sequence library. The summary line includes the sequence identifier, superfamily number (if available) position in the library, and the similarity scores calculated. This option can be used to evaluate the sensitivity and selectivity of different search strategies \cite{wrp951,wrp981}. \item[\texttt{-s file}] Specify the scoring matrix file. \texttt{fasta36} uses the same scoring matrice format as Blast. Several scoring matrix files are included in the standard distribution in the \texttt{data/} directory. For protein sequences: \texttt{codaa.mat} - based on minimum mutation matrix; \texttt{idnaa.mat} - identity matrix; \texttt{pam250.mat} - the PAM250 matrix; \cite{day787}, (\texttt{-s P250}), and \texttt{pam120.mat} - a PAM120 matrix (\texttt{-s P120}). The default scoring matrix is BLOSUM50 (\texttt{-s BL50}). Other matrices include a series of modern PAM-based matrices \cite{tay925}: MDM40/\texttt{-s MD40}, MDM20/\texttt{-s MD20}, and MDM10/\texttt{-s MD10}, and a selection from the BLOSUM series \cite{hen929} BLOSUM50, 62, and 80/\texttt{-s BL50}, \texttt{-s BL62}, \texttt{-s BL80}. \texttt{-s BP62} sets the scoring matrix to BLOSUM62 and the gap penalties to -11/-1, identical to \texttt{BLASTP}. In addition, the VTML160 matrix (\texttt{-s VT160}) \cite{muller2002} and OPTIMA\_5 (\texttt{-s OPT5}) \cite{kan023} are available. If the scoring matrix is prefaced by a question mark, e.g. \texttt{?BP62}, then the scoring matrix is adjusted for each query to ensure that a 100\% identical match can produce a score of at least 40 bits. This is designed for \texttt{fastx36} searches with potentially short DNA queries; A 120 nt DNA query can only produce a 40 amino-acid alignment, which, with BLOSUM62 -11/-1, cannot produce more than 23 bits of score. A scoring matrix with a higher information content is required; in the set available by default, MD40, with 2.22 bits/position, would be used. For more information about alignment length and information content, see \cite{alt915}. \item[\texttt{-S}] Filter out lower-case characters in the query or library sequences for the initial score calculation (used to filter low-complexity -- \texttt{seg}-ed -- residues). The \texttt{pseg} program \cite{woo935} can be used to lower-case mask low complexity regions in protein sequences. With the \texttt{-S} option, lower case characters in the query or database sequences are treated as \texttt{X}'s during the initial scan, but are treated as normal residues during the final alignment display. Since statistical significance is calculated from the similarity score calculated during the library search, the lower case residues do not contribute to the score. However, if a significant alignment contains low complexity regions, the residues are shown (as lower case characters, Fig. \ref{seg-aln}). The \texttt{pseg} program can be used to produce databases (or query sequences) with lower case residues indicating low complexity regions using the command: \begin{verbatim} pseg ./swissprot.fasta -z 1 -q > swissprot.lseg \end{verbatim} The \texttt{-S} option should always be used with \texttt{FASTX/Y} and \texttt{TFASTX/Y} because out-of-frame translations often generate low-complexity protein sequences. However, only lower case characters in the protein sequence (or protein database) are masked; lower case DNA sequences are translated into upper case protein sequences, and not treated as low complexity by the translated alignment programs. (There is an option in the \texttt{Makefile}, \texttt{-DDNALIB\_LC}, to enable preserving case in DNA sequences.) \item[\texttt{-t \#}] Translation table - fastx36, tfastx36, fasty36, and tfasty3 now support the BLAST translation tables. See \url{http://www.ncbi.nlm.nih.gov/Taxonomy/Utils/wprintgc.cgi}. \texttt{-t 1} also enables translation of \texttt{'TGA'} to \texttt{'U'} (seleno-cysteine) (by default, \texttt{'TGA'} is translated to \texttt{'*'}). Because of the ambiguity of the \texttt{'TGA'} codon, translated alignments of \texttt{'TGA'} with \texttt{-t 1} match \texttt{'U'} and \texttt{'*'} (termination) equally well. \texttt{-t t} enables the addition of an implicit termination codon to a protein:translated DNA match. That is, each protein sequence implicitly ends with \texttt{*}, which matches the termination codes for the appropriate genetic code. To change the translation table and insert a termination character after each protein sequence, use \texttt{-t 1 -t t}. \item[\texttt{-T \#}] set number of threads/workers. Normally on a multi-core machine, the maximum number of processors/cores is used. \item[\texttt{-U}] Treat the query sequence an RNA sequence. In addition to selecting a DNA/RNA alphabet, this option causes changes to the scoring matrix so that \texttt{G:A} , \texttt{T:C} or \texttt{U:C} are scored as \mbox{\texttt{G:G -3}}. \item[\texttt{-v \#}] Do window shuffles with the window size specified. \item[\texttt{-V str}] Specify annotation characters that can be included (and will be ignored), in the query sequence file, but are displayed in the alignments. If a query file contains \texttt{"ACVS*ITRLFT?"}, where \texttt{"*"} and \texttt{"?"} are used to indicate phosphorylation, giving the option \mbox{\texttt{-V '*?'}}, the annotated characters in the query will (\texttt{S*}, \texttt{F?}) will be highlighted in the alignment (on the number line). A \texttt{fasts36} alignment of \texttt{seq/ngts.aa} compared to \texttt{seq/mgstm1.aa} with \texttt{-V '*?'} produces: \begin{footnotesize} \begin{verbatim} * 10?? GT8.7 ILGYWN------------EYTDSSYDEKR---------------------------- :::::: ::::::::::: GT8.7 MPMILGYWNVRGLTHPIRMLLEYTDSSYDEKRYTMGDAPDFDRSQWLNEKFKLGLDFPNL 10 20 30 40 50 60 \end{verbatim} \end{footnotesize} In addition to showing the alignments of post-translationally modified sites, the \texttt{-V} option can be used to highlight active sites in library sequences. In the \texttt{-m 9c} output, the state of the annotated sites is summarized when \texttt{-V} is used. (fasta-36.3.6 June 2012) The \texttt{-V} option has been extended to: (1) allow feature descriptions to be specified in a file, e.g. \texttt{-V =annot.defs} where \texttt{annot.defs} contains: \begin{footnotesize} \begin{verbatim} *:phosphorylation @:active site ^:binding site \end{verbatim} \end{footnotesize} The annotation character is left of the ':', the definition is on the right. The \texttt{annot.defs} file can also be specified by setting the \texttt{FA\_ANNOT\_DEF} environment variable to the file name; (2) to include optional annotation file, e.g. \texttt{-V 'accession1 position label value >accession2 ... \end{verbatim} For example: \begin{footnotesize} \begin{verbatim} >sp|P09488.3|GSTM1_HUMAN 23 * 33 * 34 * 116 ^ 173 V N 210 V T >sp|Q03013.3|GSTM4_HUMAN 2 V P 116 ^ 160 V V 208 V V 209 V F 211 V K 212 V M >sp|Q5R8E8.3|GSTM2_PONAB ... \end{verbatim} \end{footnotesize} The same format is used for the \texttt{-V '>sp|P09488.3|GSTM1_HUMAN Glutathione S-transferase Mu 1; GST HB s (218 aa) initn: 1490 init1: 1490 opt: 1490 Z-score: 1776.8 bits: 335.9 E(1): 3.7e-97 Smith-Waterman score: 1490; 99.1% identity (100.0% similar) in 218 aa overlap (1-218:1-218) ... 170 180 190 200 210 gtm1_h YDVLDLHRIFEPNCLDAFPNLKDFISRFEGLEKISAYMKSSRFLPRPVFTKMAVWGNK x x sp|P09 YDVLDLHRIFEPKCLDAFPNLKDFISRFEGLEKISAYMKSSRFLPRPVFSKMAVWGNK 170 180 190 200 210 \end{verbatim} \end{footnotesize} With a \texttt{-V '!feature.pl'} script to annotate the variants, the alignment becomes: \begin{footnotesize} \begin{verbatim} The best scores are: opt bits E(1) sp|P09488.3|GSTM1_HUMAN Glutathione S-transferase Mu 1; GST HB s ( 218) 1500 338.1 8e-98 >>sp|P09488.3|GSTM1_HUMAN Glutathione S-transferase Mu 1; GST HB s (218 aa) Variant: K173N;S210T; initn: 1500 init1: 1500 opt: 1500 Z-score: 1788.7 bits: 338.1 E(1): 8e-98 Smith-Waterman score: 1500; 100.0% identity (100.0% similar) in 218 aa overlap (1-218:1-218) ... 170 180 190 200 210 gtm1_h YDVLDLHRIFEPNCLDAFPNLKDFISRFEGLEKISAYMKSSRFLPRPVFTKMAVWGNK sp|P09 YDVLDLHRIFEPNCLDAFPNLKDFISRFEGLEKISAYMKSSRFLPRPVFTKMAVWGNK 170 V 180 190 200 21V \end{verbatim} \end{footnotesize} In addition to removing the two differences as residues 173 and 210, which produces a 100\% identical alignment, inclusion of the variant library sequence also improves the raw similarity score and $E()$-value. An example script (\texttt{misc/up\_feats.pl}) that extracts annotations from a mysql database of Uniprot features is provided. If the annotation script produces lines beginning with '=', then these lines are taken as annotation definitions, similar to the \texttt{annot.defs} file described above. Thus: \begin{footnotesize} \begin{verbatim} =*:phosphorylation =@:active site =^:binding site >sp|P09488.3|GSTM1_HUMAN 23 * 33 * 34 * 116 ^ 173 V N 210 V T \end{verbatim} \end{footnotesize} will produce the same annotation descriptions as the \texttt{annot.defs} file. Scripts to produce annotations are available in the \texttt{scripts/} directory as \texttt{scripts/ann\_feats*.pl}. Scripts with \texttt{www} in the name, e.g. \texttt{scripts/ann\_feats\_up\_www2.pl} and \texttt{scripts/ann\_pfam\_www.pl} download annotation information from Uniprot or Pfam web services, respectively. Scripts lacking \texttt{www} require require a MySQL database that associates features or domains with sequence identifiers (accessions). With \CURRENT, domain annotations are allows to overlap each other (which often happens in Pfam and UniProt); FASTA 36.3.6 did not support overlapping domains. Scripts that can produce overlapping domain annotations have \texttt{\_e} in their names, but will produce non-overlapping domain annotations with the \texttt{--no-over} option. Thus: \texttt{scripts/ann\_pfam\_www\_e.pl --acc sp|P43553|ALR2\_YEAST} produces: \begin{quote} \begin{verbatim} >sp|P43553|ALR2_YEAST 451 - 683 PF01544 :1 667 - 799 PF01544 :1 \end{verbatim} \end{quote} While \texttt{scripts/ann\_pfam\_www\_e.pl --acc --no-over sp|P43553|ALR2\_YEAST} produces: \begin{quote} \begin{verbatim} >sp|P43553|ALR2_YEAST 451 - 675 PF01544 :1 676 - 799 PF01544 :1 \end{verbatim} \end{quote} \item[\texttt{-w \#}] Display width value ($<$200). Sets the approximate width of the high-score descriptions and the length of residue alignments. \texttt{-w 60} by default. \item[\texttt{-W \#}] context length (default is 1/2 of line width -w) for alignment, for programs like \texttt{fasta36} and \texttt{ssearch36}, that provide additional sequence context. \item[\texttt{-X extended\_option}] A number of rarely used options are now only available as extended options: \begin{description} \item[\texttt{X1}] sort output by \texttt{init1} score (for compatibility with FASTP; obsolete). \item[\texttt{XB}] Calculate pecent identity, percent similarity, and alignment using the BLAST model, which excludes gapped residues. This allows very high identity alignments with large gaps to look much closer, but causes the alignment length to drop by the length of the gap. \item[\texttt{Xb}] (Previously \texttt{-B}.) Show the z-score, rather than the bit-score in the list of best scores (rarely used, provided for backward compatibility). \item[\texttt{Xg}] (gi\_save) Historically, FASTA and BLAST have treated the string \texttt{>gi|123456} specially, removing it from the list of high scoring sequences and alignment output. \texttt{-Xg} causes \texttt{gi} numbers to be displayed. \item[\texttt{XI}] Modify rounding used in percent identity/percent similarity display to ensure that sequences that have a mismatch are not shown as 100.0\% identical. Without this option, a single mismatch in a 10,000 residue alignment would be shown as 100.0\% identical; with this option, it would be shown as 99.9\% identical. \item[\texttt{Xo}] (\texttt{fasta36}, \texttt{[t]fast[x/y]36} only) (Previously \texttt{-o}.) Turn off the default \texttt{opt} score calculation and sort results by \texttt{initn} scores (reduces sensitivity and statistical accuracy, obsolete). \item[\texttt{XM}] The maximum amount of memory available for storing the library in multi-sequence searches. The value is specified in MBytes (\texttt{-XM16}) or GBytes (\texttt{-XM4G}) and can also be set using the \texttt{LIB\_MEMK} environment variable (\texttt{LIB\_MEMK=4G}). Negative values remove the memory restriction. By default (set as a compile-time option, \texttt{-DMAX\_MEMK=2}), set to 2 GBytes in 32-bit environments and 12 GBytes in 64-bit environments. \item[\texttt{XN/XX}] Alter the treatment of N:N (DNA) or X:X (protein) alignments for counts of identities and similarities. By default the \texttt{FASTA} programs count N:N or X:X as identical, but not similar, because their alignment scores are typically negative. \texttt{-XNS}, \texttt{-XN+}, \texttt{-XXS}, and \texttt{-XX+} treat N:N and X:X alignments as ``similar'' , even though their alignment scores are negative, when calculating percent similarity. \texttt{-XND}, \texttt{-XN-}, \texttt{-XXD}, and \texttt{-XX-} treat N:N and X:X alignments as non-identical for calculating percent identity. \item[\texttt{Xx}] (Previously \texttt{-x}) Specify the penalty for a match to an \texttt{X}, and mismatch to \texttt{X}, independently of the PAM matrix. Particularly useful for \texttt{fastx3/fasty36}, where termination codons are encoded as \texttt{X}. For example, \texttt{-Xx=0,-1} scores an \texttt{X:X} match as 0, and \texttt{X:not-X} as -1. \item[\texttt{Xy}] (Previously \texttt{-y}.) Set the width of the band used for calculating "optimized" scores. For proteins and ktup=2, the width is 16. For proteins with ktup=1, the width is 32 by default. For DNA the width is 16. \end{description} \item[\texttt{-z -1,0,1,2,3,4,5,6}]\hfill\\ \texttt{-z -1} turns off statistical calculations. \texttt{z 0} estimates the significance of the match from the mean and standard deviation of the library scores, without correcting for library sequence length. \texttt{-z 1} (the default) uses a weighted regression of average score vs library sequence length; \texttt{-z 2} uses maximum likelihood estimates of $\lambda$ and $K$; \texttt{-z 3} uses Altschul-Gish parameters \cite{alt960}; \texttt{-z 4 - 5} uses two variations on the \texttt{-z 1} strategy. \texttt{-z 1} and \texttt{-z 2} are the best methods, in general. \item[\texttt{-z 11,12,14,15,16}]\hfill\\ estimate the statistical parameters from shuffled copies of each library sequence. This allows accurate statistics to be estimated for libraries comprised of a single protein family. \item[\texttt{-z 21,22,24,25,26}]\hfill\\ estimate the statistical parameters from shuffled copies of the highest scoring sequences reported in the search. library sequence. This shuffling strategy is much more like \texttt{prss}, since the sequences shuffled share compositional similarity to the query. \item[\texttt{-Z db\_size}] sets the apparent size of the database to be used when calculating expectation E()-values. If you searched a database with 1,000 sequences, but would like to have the E()-values calculated in the context of a 100,000 sequence database, use \texttt{-Z 100000}. \item[\texttt{-3}] translate only three forward frames or search with only the forward strand (complement of \texttt{-i}). \end{description} Thus, to tell \texttt{fasta36} to align \texttt{seq1.aa} with \texttt{seq2.aa} showing the entirety of both sequences, with 80 characters per line, one would type: \begin{verbatim} fasta36 -w 80 -s BP62 -a seq1.aa seq2.aa \end{verbatim} The \texttt{-w 80} and \texttt{-a} options must precede the file names. If you just enter the options on the command line followed by \texttt{-I}, the program will prompt for the file names. In addition, the FASTA programs can accept query sequence data from \texttt{STDIN}. To specify that stdin be used as the query or library file, the file name should be specified as \texttt{@}. Thus: \begin{quote} \texttt{cat query.aa | fasta36 @:25-75 /slib/swissprot } \end{quote} would take residues 25-75 from \texttt{query.aa} and search the \texttt{/slib/swissprot}. \subsubsection{Environment variables} FASTA allows virtually every option to be set on the command line (except the \emph{ktup}, which must be set as the third command line argument), but it is often convenient to set the \texttt{FASTLIBS} environment variable to specify the location of the \texttt{fastlibs} database description file. \texttt{FASTLIBS} -- \texttt{FASTLIBS} specifies the location of the file that contains the list of library descriptions, locations, and library types (see section on finding library files). \texttt{LIB\_MEMK} -- Set the maximum amount of memory (MBytes) to be available for library buffering (equivalent to \texttt{-XM\#}, see above). By default, \texttt{2GB} is available on 32-bit systems (\texttt{LIB\_MEMK=2G}); \texttt{8GB} on 64-bit systems. \texttt{REF\_URL}, \texttt{SRCH\_URL} and \texttt{SRCH\_URL1} -- These environment variables are used in HTML mode (\texttt{-m 6}) to provide links from the sequence alignment (see the links at \url{http://fasta.bioch.virginia.edu/fasta_www2/}). \texttt{REF\_URL} is associated with the \texttt{Entrez Lookup} link; \texttt{SRCH\_URL} with the \texttt{General re-search} link, and \texttt{SRCH\_URL1} with the \texttt{Pairwise alignment} link. In each case, the text corresponds to a HTML URL, but with positions containing the \texttt{\%s} or \texttt{\%ld} (for numbers) part of a 'C' \texttt{sprintf()} call for specific variables. \texttt{REF\_URL} uses the database (\texttt{protein} or \texttt{nucleotide}), together with a query term (typically the \texttt{gi} number). \texttt{SRCH\_URL} and \texttt{SRCH\_URL1} use \texttt{db}, \texttt{query} (\texttt{gi}, \texttt{pgm} (\texttt{fa}, \texttt{ss}, \texttt{fx}, etc.), and \texttt{start}, \texttt{stop}, and \texttt{n1} (library sequence length), where \texttt{start} and \texttt{stop} are the boundaries of the alignment, for sub-sequence searches. The values of these environment variables are used with \texttt{sprintf} to build a new URL that is linked in the output. \texttt{TMP\_DIR} -- Location (if defined) of the temporary files used by the \texttt{-e expand\_script.sh} option. In addition, environment variables can be used inside both the \texttt{fastlibs} file and in the \texttt{@db.nam} files of file names. The \texttt{fasta36/conf/fast\_libs\_e.www} file, included with the distribution, shows an example, as do the descriptions of file of file names files shown below. Whenever a word of the form \texttt{\$\{WORD\}} is found in \texttt{fastlibs} or a file of file names, the \texttt{\$\{WORD\}} environment variable is expanded and inserted in the string. Thus, if \texttt{<\$\{SLIB\}/blast\_dbs/} describes where a list of files will be found and \texttt{\$\{SLIB\}} is \texttt{"/seqdata"}, then the resulting substitution yields: \texttt{ /seqdata/swissprot.lseg \end{verbatim} \end{quote} And then you can run most FASTA programs with \texttt{-S}: \begin{quote} \begin{verbatim} ssearch36 -S mgstm1.aa /seqdata/swissprot.lseg \end{verbatim} \end{quote} Fig. \ref{seg-aln} shows the effect of including the \texttt{-S} option with lower-cased low-complexity sequences. The \texttt{opt} score (407), which is used to sort the results and calculate statistics, is lower than the Smith-Waterman score (451), even though exactly the same residues are aligned for each score. The \texttt{opt} score excludes residues 19-30, because they were marked as low-complexity by \texttt{pseg}; thus they are shown as lower-case. The Smith-Waterman score includes the contribution from that part of the alignment. Out-of-frame translated DNA sequences often produce low-complexity regions \cite{wrp973}, so it is particularly important to avoid low-complexity alignments when using \texttt{fastx36} and \texttt{fasty36} \subsection{Searching taxonomic subsets} Because increasing database size reduces search sensitivity (an alignment with an $E()$-value of $0.001$ in a search of a 100,000 entry database will have an $E()$-value of 0.1, not significant, if found in a database of 10,000,000 sequences), it is much more effective to search smaller, less redundant databases (you can always search the larger database later). Thus, the \texttt{refseq\_protein} database from the NCBI is preferred over \texttt{nr}; even better are databases that reflect a limited phylogenetic range (e.g. \texttt{refseq\_human} for vertebrate sequences). While the NCBI provides organism-specific \texttt{refseq} subsets on their FTP site, they can be difficult to find. Alternatively, you can use the NCBI \texttt{Entrez} web site to download a list of \texttt{gi} numbers specific to a particular organism or taxonomic range. The FASTA programs can search a subset of a large sequence database that is specified by a list of \texttt{gi} numbers by using library format 10. For example, given a list of \texttt{gi} numbers for the human proteins in \texttt{swissprot.lseg}, the file \texttt{sp\_human.db}, with the content: \begin{quote} \begin{verbatim} <${SLIB}/swissprot.lseg 0:2 4| 3121763 51701705 7404340 205831112 74735515 ... \end{verbatim} \end{quote} could be used to search the human subset of \texttt{swissprot.lseg}. The \texttt{gi} numbers for the SwissProt entries begin with the second line. The first line specifies the location of the file where the sequences containing the \texttt{gi} numbers can be found (\texttt{\$\{SLIB\}/swissprot.lseg}, the \texttt{libtype} of that file (\texttt{0:fasta}), the character offset to the beginning of the sequence identifier in that file (\texttt{2}), the identifier type (\texttt{4}), and the character that separates the fields in the FASTA descriptor (\texttt{|}). The identifier type can take four formats: \begin{tabular}{l l} \hline\\[-1.5ex] 1 & ordered accession strings (letters or numbers)\\ 2 & ordered numbers (digits only) \\ 3 & un-ordered accession strings \\ 4 & un-ordered numbers \\ \hline\\ \end{tabular}\\ (Ordered accession strings/numbers are ordered in both the library and the subset file.) Thus, given the \texttt{0:2 4|} specification above, the line: \begin{quote} \texttt{>sp|O15143.3|ARC1B\_HUMAN Actin-related protein 2/3 ...} \end{quote} would be parsed, looking for an number starting at column 4 (the first column is numbered 0), and ending with \texttt{|}. The order of sequences in the library do not have to correspond to the order in the \texttt{sp\_human.db} file (un-ordered). Given a the \texttt{sp\_human.db} file, a file \texttt{swissprot.lseg} in the directory specified by the environment variable \texttt{\$\{SLIB\}}, and a command of the form: \begin{quote} \texttt{fasta36 -S mgstm1.aa 'sp\_human.db 10'} \end{quote} Would use the \texttt{sp\_human.db} file to search the subset of \texttt{swissprot.lseg} that contained the specified \texttt{gi} numbers. \subsection{DNA sequence libraries} Because of the large size of DNA databases, you will probably want to keep DNA databases in only one format. The FASTA3 programs that search DNA databases --- \texttt{fasta36}, \texttt{fastm36}, and \texttt{tfastx/y36} --- can read DNA databases in Genbank flatfile (not ASN.1), FASTA, and BLAST2.0 (\texttt{formatdb}) formats, as well as EMBL format. BLAST2.0 format is preferred for DNA sequence libraries, because the files are considerably more compact than GenBank format. The NCBI does not provide software for converting from Genbank flat files to Blast2.0 DNA databases, but you can use the Blast \texttt{formatdb} program to convert ASN.1 formatted Genbank files, which are available from the NCBI \texttt{ftp} site. The NCBI also provides the comprehensive \texttt{nt} DNA database, and several EST databases in Blast2.0/\texttt{formatdb} format from \texttt{ftp://ncbi.nlm.nih.gov/blast/db}. \subsection{Finding the library files} All the FASTA programs comparison programs have the command line syntax: \begin{quote} \texttt{fasta36 query.file /seqdata/library} \end{quote} However, in addition to simply specifying the location of the database to be searched (\texttt{/seqdata/library}), the FASTA programs provide several methods for referring to sequence databases without specifying a specific file. These methods can be used to provide abbreviations for sequence libraries, e.g.: \begin{quote} \texttt{fasta36 query.file s} or \texttt{fasta36 query.file +sp+} \end{quote} To use abbreviations like \texttt{'s'} or \texttt{'+sp+'} to reference a sequence database, a \texttt{FASTLIBS} file must be used, see section \ref{fastlibs}. Large DNA and protein databases are often distributed across several files. For example, the NCBI \texttt{nr} protein database is found in 5 files, \texttt{nr.00} ... \texttt{nr.04}. To search databases in multiple files, the names of the files are specified in a file of filenames, \texttt{nr.nam}: \begin{quote} \begin{verbatim} <${SLIB}/blast_dbs/ nr.00 12 nr.01 12 nr.02 12 nr.03 12 nr.04 12 \end{verbatim} \end{quote} In this file, the first line \texttt{<\$\{SLIB2\}/blast\_dbs/}, beginning with \texttt{<}, specifies the location and format (Blast2.0 \texttt{formatdb}) the data files. Text of the form \texttt{\$\{SLIB\}} refers to Unix/MacOSX/Windows environment variables; the value of \texttt{\$\{SLIB\}} is set by a Unix/MacOSX shell environment command. Thus, if the value of \texttt{\$\{SLIB\}} is \texttt{/seqdata}, then the first sequence library file to be read will be \texttt{/seqdata/blast\_dbs/nr.00}, in format 12 (Blast2.0 \texttt{formatdb}). To refer to the \texttt{nr.nam} file as a file of file names, it must be prefixed by a \texttt{@} character, e.g. \begin{quote} \texttt{fasta36 query.file \textbf{@}nr.nam} \end{quote} Files of file names can contain references to other files of file names: \begin{quote} \begin{verbatim} <${SLIB}/fasta_dbs/ @pdb.nam @swissprot.nam \end{verbatim} \end{quote} The FASTA file of file names is similar to the NCBI \texttt{prot\_db.pal} and \texttt{dna\_db.nal}, files, but unfortunately they are different, and currently FASTA cannot read NCBI \texttt{.pal} or \texttt{.nal} files that contain a \texttt{DBLIST} line. FASTA can read NCBI \texttt{.pal} or \texttt{.nal} files that do not contain a \texttt{DBLIST} line. FASTA version \texttt{fasta-36.3.6} provides an alternative way to generate a database to be searched: the \texttt{!script.sh} file. Like the \texttt{-e expand\_file.sh} script, a shell script or program can be used to produce a database to a temporary file, which is then seached. For example, if the file \texttt{cat\_db.sh} contains the command \texttt{echo /seqdb/swissprot.lseg}, the command: \begin{quote} \begin{verbatim} fasta36 query.aa \!@cat_db.sh \end{verbatim} \end{quote} will cause \texttt{cat\_db.sh} to produce a temporary file with the line \texttt{swissprot.lseg}, which is interpreted as an indirect file of filenames; thus, because of the \texttt{@}, the file will be interpreted as an indirect file, and the \texttt{swissprot.lseg} file will be searched. Note that on Unix systems, the \texttt{'!'} must be preceeded by a \texttt{'\textbackslash'} so that it is not interpreted by the shell, as shown above. \subsection{\texttt{FASTLIBS}} \label{fastlibs} All the search programs in the FASTA3 package can use the environment variable \texttt{FASTLIBS} to find the protein and DNA sequence libraries. (Alternatively, you can specify the \texttt{FASTLIBS} file with the \texttt{-l fastlibs.file} option.) The \texttt{FASTLIBS} variable contains the name of a file that has the actual filenames of the libraries. The \texttt{fastlibs} file included with the distribution is an example of a file that can be referred to by FASTLIBS. To use the \texttt{fastlibs} file, type: \begin{quote} \texttt{setenv FASTLIBS /seqdata/info/fastgbs} (csh/tcsh)\\ or\\ \texttt{export FASTLIBS=/seqdata/info/fastgbs} (bash/ksh) \end{quote} Then edit the \texttt{fastlibs} file to indicate the location of the protein and DNA sequence libraries. If the protein sequence library is kept in the file \texttt{/seqdata/aa/swissprot.lseg} and your Genbank DNA sequence library is kept in the directory: \texttt{/seqdata/genbank}, then the \texttt{fastlibs} file might contain: %%\pagebreak \begin{verbatim} SwissProt$0P/seqdata/aa/swissprot.lseg 0 UniProt$0+uniprot+@/seqdata/aa/uniprot.nam GB Primate$1P@/seqdata/genbank/gpri.nam GB Rodent$1R@/seqdata/genbank/grod.nam GB Mammal$1M@/seqdata/genbank/gmammal.nam ^ 1 ^^^^ 4 ^ ^ 23 (5) \end{verbatim} The first line of this file says that there is a copy of the SwissProt sequence database (a protein database) that can be selected by typing "P" on the command line or when the database menu is presented in interactive mode. Note that there are 4 (or 5) fields in the lines in the \texttt{fastlibs} file. The first field describes library and is displayed by FASTA program; it ends with the '\$'. The second field (1 character), is a 0 if the library is a protein library and 1 if it is a DNA library. The third field can either be a single character (\texttt{P}) or a word surrounded by the \texttt{+} symbol (\texttt{+uniprot+}), and can be used to specify the library on the command line or in interactive mode. The fourth field is the name of the library file. In the example above, the \texttt{/seqdata/aa/swissprot.lseg} file contains the entire protein sequence library. Alternatively, \texttt{/seqdata/aa/uniprot.nam} is a file of file names, which contains a list of one or more library files. Likewise, the DNA library files are files of file names. In addition, an optional fifth field can be used to specify the format of the library file. Alternatively, you can specify the library format in a file of file names. This field must be separated from the file name by a space character ('\ ') from the filename. FASTA can read the libraries in the following formats:\\ \begin{tabular}{r l} 0 & FASTA (\texttt{>SEQID} - comment/sequence) \\ 1 & Uncompressed Genbank (LOCUS/DEFINITION/ORIGIN)\\ 2 & NBRF CODATA (ENTRY/SEQUENCE) (obsolete)\\ 3 & EMBL/SWISS-PROT (ID/DE/SQ)\\ 4 & Intelligenetics (;comment/SEQID/sequence) (obsolete)\\ 5 & NBRF/PIR VMS (\texttt{>P1;SEQID}/comment/sequence) (obsolete)\\ 6 & GCG (version 8.0) Unix Protein and DNA (compressed)\\ 7 & FASTQ (sequence only, quality ignored)\\ 9 & a script that is executed to produce FASTA format sequences \\ 10 & subset format ( } \\ \texttt{M10\_CONS} & def & \texttt{c\_dispn.c} & show consensus line (\texttt{:. }) with \texttt{-m 10} output. \\ \texttt{OLD\_FASTA\_GAP} & undef & \texttt{drop*.c} & use first-residue/additional residue penalties, not open/extend. \\ \texttt{PGM\_DOC} & def & \texttt{comp\_lib5e.c}, \texttt{comp\_lib8.c} & provide \texttt{\#pgm\_name -opt1 -opt2 query file} copy of command line \\ \texttt{PROGRESS} & def & \texttt{comp\_lib5e.c}, \texttt{comp\_lib8.c} & provide progress symbols in interactive mode \\ \texttt{SAMP\_STATS} & def & \texttt{comp\_lib5e.c}, \texttt{comp\_lib8.c} & scores are sampled for statistical estimates \\ \texttt{SAMP\_STATS\_LESS} & def & \texttt{compacc.c} & a slower sampling strategy is used \\ \texttt{SHOW\_ALIGN\_SCORE} & undef & \texttt{wm\_align.c} & print score, cummulative score, during alignment (for teaching) \\ \texttt{SHOW\_HELP} & def & \texttt{comp\_lib5e.c}, \texttt{comp\_lib8.c}, \texttt{initfa.c}, \texttt{doinit.c} & print out help information with '-help', or no arguments given. Undef \texttt{SHOW\_HELP} reverts to pre-\texttt{fasta-35.4.4}.\\ \texttt{SHOW\_HIST} & undef & \texttt{doinit.c} & inverts current meaning of \texttt{-H} (shows by default for non-PCOMPLIB (MPI) programs). \\ \texttt{SHOWSIM} & def & \texttt{mshowbest.c} \texttt{mshowalign2.c} & display percent similarity \\ \texttt{USE\_LNSTATS} & obs & \texttt{scaleswn.c} & use $ln()$-scaling for scores, removed in \texttt{fasta2.0}.\\ \hline \\ \end{tabular} $^*$Status: def: \#defined in standard \texttt{Makefiles}; undef: undefined; obs: obsolete, provided backwards compatibility with FASTA2.0 or earlier. \end{table} The \texttt{fasta-36/make} directory includes \texttt{Makefile}s appropriate for a broad range of environments, including Linux/Unix, BSD, MacOSX, and Windows. Makefiles are regularly tested against MacOSX, Linux, and Windows. Table \ref{make-defs} summarizes the Makefile options that can be modified. As distributed, the \texttt{Makefiles} in \texttt{fasta36/make}, build a version of the FASTA programs that is optimized for single searches against arbitrary sized databases, using bit scores, efficient sampled statistics, and gap-open/extend penalties. The default compilation configuration can be changed either by changing the compile time defines (Table \ref{make-defs}) in the main \texttt{Makefile}, e.g. \texttt{make/Makefile.linux64\_sse2}, or by editing \texttt{make/Makefile36m.common}. \emph{High-performance searches with many queries} -- By default, the \texttt{comp\_lib5e.c} program specified in \texttt{Makefile36m.common} builds FASTA programs that re-read the library sequence database for every query sequence. This has the advantage that sequence comparison begins almost immediately, but if thousands of searches are being performed, the database is re-read thousands of times. \texttt{Makefile36m.common} can be edited to use \texttt{comp\_lib8.c} in place of \texttt{comp\_lib5e.c} and the database is read only once, then held in memory for additional searches. Of course, if \texttt{comp\_lib8.c} is used, the computer must have enough memory to store the complete database. Keeping the database in memory allows the FASTA programs to very efficiently used large, multicore computers. \needspace{5\baselineskip} \emph{Parallel searches with MPI} -- By default under Unix/Linux/MacOSX, the FASTA programs are threaded; they will spawn as many threads as CPU cores are available (this can be limited with the \texttt{-t n-threads} option). Using \texttt{comp\_lib8.c}, we see almost 48-fold speedup on a 48-core machine. The FASTA programs can also be run in parallel in the MPI environment on clusters of computers. To build the MPI versions of the programs, use \texttt{make ../make/Makefile.mpi\_sse2 ssearch36\_mpi}, \texttt{fastx36\_mpi}, etc. The MPI programs currently substantially more communications overhead than the threaded versions, so they may not scale as well to large clusters. \include{fasta.history} \end{document} fasta36-36.3.8i_14-Nov-2020/doc/fasta_versions.html000066400000000000000000000115411433453312700213500ustar00rootroot00000000000000 Major FASTA versions

FASTA version summary


November, 2022

The complete FASTA search package is available from the U. Virginia FASTA software site and from GitHub: github.com/wrpearson/fasta36. This page describes a few of the functional changes to the FASTA package over the past 30 years.

Note that a very old version of the package, FASTA2, provides the Kyte-Doolittle hydropathy plotting program and the Garnier and Chou-Fasman secondary structure prediction programs. These programs may be useful for teaching, but they should not be used for serious sequence analysis; far far better programs are available.


VersionNew ProgramsOther changes
fasta-36 None The major improvement in FASTA v36 is the ability to calculate and display multiple significant alignments (multiple HSP's) between a query sequence and a library sequence. Previous FASTA versions had the serious shortcoming of only showing the best alignment. A tfastx36 alignment between a protein and its exon-containing gene will show all of the exon alignments that are long enough to be significant.

FASTA v36 also provides more flexible strategies for searching lists of datbase files, and versions after fasta-36.2 are fully threaded, so both searches and alignments can be distributed among multiple processors with efficient speedup.


fasta-35,34,33 +lalign35
+ggsearch35
+glsearch35
-prss3
-prfx3
FASTA v35 provides significant improvements in statistical accuracy and program efficiency in threaded (multi-CPU, multi-core) environments. The program now automatically produces 500 random shuffles when small libraries are searched. Thus, prss and prfx are no longer required; ssearch35 and fastx35 provide the same function.

+ssearch3
+fasts3/tfasts3
+fastf3/tfastf3
-lfasta
-lalign
-tfasta
FASTA v34 is the last version of the FASTA3 series before the significant changes introduced with FASTA v35. The FASTA v3 programs were first introduced in 1996, with threaded code for multi-processors, more accurate statistical estimates, and optimal Smith-Waterman alignments with ssearch. More recent versions (v34) provided accelerated Smith-Waterman searches using Altivec and SSE2 vector processors. FASTA v34 is no longer updated for bug fixes.

fasta2 +lfasta
+tfasta
FASTA v2 was introduced in 1995, improving sensitivity by calculated gapped alignment scores. Modern (V34 and V35) versions of FASTA have significantly more robust statistical estimates, threaded code, and vectorized Smith-Waterman, so FASTA v2 should not be used for database searching. Today, the only programs provided in FASTA v2 that are not provided in FASTA v35 are the Kyte-Doolittle hydropathy plotter grease and the classic (though very inaccurate) secondary structure prediction programs chofas and garnier

The current stable version of the FASTA programs is version 36. Older releases of version 36 are available in the fasta33-35 directory. But the CURRENT version of FASTA should be used whenever possible. Many bug reports reflect older versions of the software.


Description of minor changes:
changes_v36.html
changes_v35.html
changes_v34.html


fasta36-36.3.8i_14-Nov-2020/doc/fastf3.1000066400000000000000000000113241433453312700167030ustar00rootroot00000000000000.TH FASTF/TFASTFv3 1 local .SH NAME fastf3, fastf3_t \- compare a mixed peptide sequence against a protein database using a modified fasta algorithm. tfastf3, tfastf3_t \- compare a mixed pepide sequence against a translated DNA database. .SH DESCRIPTION .B fastf3 and .B tfastf3 are designed to compare a sequence of mixed peptides to a protein (fastf3) or translated DNA (tfastf3) database. Unlike the traditional .B fasta3 search, which uses a protein or DNA sequence, .B fastf3 and .B tfastf3 work with a query sequence of the form: .in +5 .nf >testf from mgstm1 MGCEN, MIDYP, MLLAY, MLLGY .fi .in 0 This sequence indicates that a mixture of four peptides has been found, with 'M' in the first position of each one (as from a CNBr cleavage), in the second position 'G', 'I', or 'L' (twice), at the third position 'C', 'D', or 'L' (twice), at the fourth position 'E', 'Y', 'A', or 'G', etc. When this sequence is compared against mgstm1.aa (included with the distribution), the mixture is deconvolved to form: .nf .ft C .in +5 testf MILGY-----------MLLEY-----------MGDAP----------- ::::: ::::: ::::: GT8.7 MPMILGYWNVRGLTHPIRMLLEYTDSSYDEKRYTMGDAPDFDRSQWLNEK 10 20 30 40 50 testf -------------------------------------------------- GT8.7 FKLGLDFPNLPYLIDGSHKITQSNAILRYLARKHHLDGETEEERIRADIV 60 70 80 90 100 20 testf ------------MLCYN ::::: GT8.7 ENQVMDTRMQLIMLCYNPDFEKQKPEFLKTIPEKMKLYSEFLGKRPWFAG 110 120 130 140 150 .in 0 .ft P .fi .SH Options .LP .B fastf3 and .B tfastf3 can accept a query sequence from the unix "stdin" data stream. This makes it much easier to use fasta3 and its relatives as part of a WWW page. To indicate that stdin is to be used, use "-" or "@" as the query sequence file name. .TP \-b # number of best scores to show (must be < -E cutoff) .TP \-d # number of best alignments to show ( must be < -E cutoff) .TP \-D turn on debugging mode. Enables checks on sequence alphabet that cause problems with tfastx3, tfasty3, tfasta3. .TP \-E # Expectation value limit for displaying scores and alignments. Expectation values for .B fastf3 and .B tfastf3 are not as accurate as those for the other .B fasta3 programs. .TP \-H turn off histogram display .TP \-i compare against only the reverse complement of the library sequence. .TP \-L report long sequence description in alignments .TP \-m 0,1,2,3,4,5,6,10 alignment display options .TP \-n force query to nucleotide sequence .TP \-N # break long library sequences into blocks of # residues. Useful for bacterial genomes, which have only one sequence entry. -N 2000 works well for well for bacterial genomes. .TP \-O file send output to file .TP \-q/-Q quiet option; do not prompt for input .TP \-R file save all scores to statistics file .TP \-S # offset substitution matrix values by a constant # .TP \-s name specify substitution matrix. BLOSUM50 is used by default; PAM250, PAM120, and BLOSUM62 can be specified by setting -s P120, P250, or BL62. With this version, many more scoring matrices are available, including BLOSUM80 (BL80), and MDM_10, MDM_20, MDM_40 (M10, M20, M40). Alternatively, BLASTP1.4 format scoring matrix files can be specified. .TP \-T # (threaded, parallel only) number of threads or workers to use (set by default to 4 at compile time). .TP \-t # Translation table - tfastf3 can use the BLAST tranlation tables. See \fChttp://www.ncbi.nih.gov/htbin-post/Taxonomy/wprintgc?mode=c/\fP. .TP \-w # line width for similarity score, sequence alignment, output. .TP \-x "#,#" offsets query, library sequence for numbering alignments .TP \-z # Specify statistical calculation. Default is -z 1, which uses regression against the length of the library sequence. -z 0 disables statistics. -z 2 uses the ln() length correction. -z 3 uses Altschul and Gish's statistical estimates for specific protein BLOSUM scoring matrices and gap penalties. -z 4: an alternate regression method. .TP \-Z db_size Set the apparent database size used for expectation value calculations. .TP \-1 Sort by "init1" score. .TP \-3 (TFASTF3 only) use only forward frame translations .SH Environment variables: .TP FASTLIBS location of library choice file (-l FASTLIBS) .TP SMATRIX default scoring matrix (-s SMATRIX) .TP SRCH_URL the format string used to define the option to re-search the database. .TP REF_URL the format string used to define the option to lookup the library sequence in entrez, or some other database. .SH AUTHOR Bill Pearson .br wrp@virginia.EDU fasta36-36.3.8i_14-Nov-2020/doc/fasts3.1000066400000000000000000000107101433453312700167160ustar00rootroot00000000000000.TH FASTS/TFASTSv3 1 local .SH NAME fasts3, fasts3_t \- compare several short peptide sequences against a protein database using a modified fasta algorithm. tfasts3, tfasts3_t \- compare short pepides against a translated DNA database. .SH DESCRIPTION .B fasts3 and .B tfasts3 are designed to compare set of (presumably non-contiguous) peptides to a protein (fasts3) or translated DNA (tfasts3) database. fasts3/tfasts3 are designed particularly for short peptide data from mass-spec analysis of protein digests. Unlike the traditional .B fasta3 search, which uses a protein or DNA sequence, .B fasts3 and .B tfasts3 work with a query sequence of the form: .in +5 .nf >tests from mgstm1 MLLE, MILGYW, MGADP, MLCYNP .fi .in 0 This sequence indicates that four peptides are to be used. When this sequence is compared against mgstm1.aa (included with the distribution), the result is: .nf .ft C .in +5 testf MILGYW----------MLLE------------MGDAP----------- :::::: :::: ::::: GT8.7 MPMILGYWNVRGLTHPIRMLLEYTDSSYDEKRYTMGDAPDFDRSQWLNEK 10 20 30 40 50 testf -------------------------------------------------- GT8.7 FKLGLDFPNLPYLIDGSHKITQSNAILRYLARKHHLDGETEEERIRADIV 60 70 80 90 100 20 testf ------------MLCYNP :::::: GT8.7 ENQVMDTRMQLIMLCYNPDFEKQKPEFLKTIPEKMKLYSEFLGKRPWFAG 110 120 130 140 150 .in 0 .ft P .fi .SH Options .LP .B fasts3 and .B tfasts3 can accept a query sequence from the unix "stdin" data stream. This makes it much easier to use fasta3 and its relatives as part of a WWW page. To indicate that stdin is to be used, use "-" or "@" as the query sequence file name. .TP \-b # number of best scores to show (must be < -E cutoff) .TP \-d # number of best alignments to show ( must be < -E cutoff) .TP \-D turn on debugging mode. Enables checks on sequence alphabet that cause problems with tfastx3, tfasty3, tfasta3. .TP \-E # Expectation value limit for displaying scores and alignments. Expectation values for .B fasts3 and .B tfasts3 are not as accurate as those for the other .B fasta3 programs. .TP \-H turn off histogram display .TP \-i compare against only the reverse complement of the library sequence. .TP \-L report long sequence description in alignments .TP \-m 0,1,2,3,4,5,6,9,10 alignment display options .TP \-N # break long library sequences into blocks of # residues. Useful for bacterial genomes, which have only one sequence entry. -N 2000 works well for well for bacterial genomes. .TP \-O file send output to file .TP \-q/-Q quiet option; do not prompt for input .TP \-R file save all scores to statistics file .TP \-S # offset substitution matrix values by a constant # .TP \-s name specify substitution matrix. BLOSUM50 is used by default; PAM250, PAM120, and BLOSUM62 can be specified by setting -s P120, P250, or BL62. With this version, many more scoring matrices are available, including BLOSUM80 (BL80), and MDM_10, MDM_20, MDM_40 (M10, M20, M40). Alternatively, BLASTP1.4 format scoring matrix files can be specified. .TP \-T # (threaded, parallel only) number of threads or workers to use (set by default to 4 at compile time). .TP \-t # Translation table - tfasts3 can use the BLAST tranlation tables. See \fChttp://www.ncbi.nih.gov/htbin-post/Taxonomy/wprintgc?mode=c/\fP. .TP \-w # line width for similarity score, sequence alignment, output. .TP \-x "#,#" offsets query, library sequence for numbering alignments .TP \-z # Specify statistical calculation. Default is -z 1, which uses regression against the length of the library sequence. -z 0 disables statistics. -z 2 uses the ln() length correction. -z 3 uses Altschul and Gish's statistical estimates for specific protein BLOSUM scoring matrices and gap penalties. -z 4: an alternate regression method. .TP \-Z db_size Set the apparent database size used for expectation value calculations. .TP \-3 (TFASTS3 only) use only forward frame translations .SH Environment variables: .TP FASTLIBS location of library choice file (-l FASTLIBS) .TP SMATRIX default scoring matrix (-s SMATRIX) .TP SRCH_URL the format string used to define the option to re-search the database. .TP REF_URL the format string used to define the option to lookup the library sequence in entrez, or some other database. .SH AUTHOR Bill Pearson .br wrp@virginia.EDU fasta36-36.3.8i_14-Nov-2020/doc/map_db.1000066400000000000000000000016641433453312700167450ustar00rootroot00000000000000.TH MAP_DB "September, 1999" .SH NAME .B map_db \- read a FASTA (0), GENBANK flat file (1) PIR/VMS (5) or GCG binary (6) sequence database and produce the offsets necessary for efficient memory mapping. .SH SYNOPSIS .B map_db [-n] filename | "filename libtype" .SH DESCRIPTION .B map_db .I filename reads the sequence database in .I filename and produce a new file .I filename.xin with the offset information necessary for efficient memory mapping. .LP The programs in fasta version 32t08 can use memory mapped i/o to load sequence database files and read them efficiently. Memory mapping is used only if a "\c .I .xin\c \&" file is available. The "\c .I .xin\c \&" file is created by .B map_db\c \&. .LP In addition to .B map_db\c \&, .B list_db is available to display the database size, etc, and set of offsets calculated by .B map_db\c \&. .SH OPTIONS .TP \-n Read file as DNA database. .SH BUGS .SH AUTHOR Bill Pearson .br wrp@virginia.EDU fasta36-36.3.8i_14-Nov-2020/doc/prss3.1000066400000000000000000000115511433453312700165710ustar00rootroot00000000000000.TH PRSS3 1 local .SH NAME prss \- test a protein sequence similarity for significance .SH SYNOPSIS .B prss34 \&[-Q -A -f # -g # -H -O file -s SMATRIX -w # -Z # .I -k # -v # ] sequence-file-1 sequence-file-2 [ .I #-of-shuffles ] .B prfx34 \&[-Q -A -f # -g # -H -O file -s SMATRIX -w # -z 1,3 -Z # .I -k # -v # ] sequence-file-1 sequence-file-2 [ .I ktup ] [ .I #-of-shuffles ] .B prss34(_t)/prfx34(_t) [-AfghksvwzZ] \- interactive mode .SH DESCRIPTION .B prss34 and .B prfx34 are used to evaluate the significance of a protein:protein, DNA:DNA ( .B prss34 ), or translated-DNA:protein ( .B prfx34 ) sequence similarity score by comparing two sequences and calculating optimal similarity scores, and then repeatedly shuffling the second sequence, and calculating optimal similarity scores using the Smith-Waterman algorithm. An extreme value distribution is then fit to the shuffled-sequence scores. The characteristic parameters of the extreme value distribution are then used to estimate the probability that each of the unshuffled sequence scores would be obtained by chance in one sequence, or in a number of sequences equal to the number of shuffles. This program is derived from .B rdf2\c \&, described by Pearson and Lipman, PNAS (1988) 85:2444-2448, and Pearson (Meth. Enz. 183:63-98). Use of the extreme value distribution for estimating the probabilities of similarity scores was described by Altshul and Karlin, PNAS (1990) 87:2264-2268. The 'z-values' calculated by rdf2 are not as informative as the P-values and expectations calculated by prdf. .B prss34 calculates optimal scores using the same rigorous Smith-Waterman algorithm (Smith and Waterman, J. Mol. Biol. (1983) 147:195-197) used by the .B ssearch34 program. .B prfx34 calculates scores using the FASTX algorithm (Pearson et al. (1997) Genomics 46:24-36. .PP .B prss34 and .B prfx34 also allow a more sophisticated shuffling method: residues can be shuffled within a local window, so that the order of residues 1-10, 11-20, etc, is destroyed but a residue in the first 10 is never swapped with a residue outside the first ten, and so on for each local window. .SH EXAMPLES .TP (1) .B prss34 \& -v 10 musplfm.aa lcbo.aa .PP Compare the amino acid sequence in the file musplfm.aa with that in lcbo.aa, then shuffle lcbo.aa 200 times using a local shuffle with a window of 10. Report the significance of the unshuffled musplfm/lcbo comparison scores with respect to the shuffled scores. .TP (2) .B prss34 musplfm.aa lcbo.aa 1000 .PP Compare the amino acid sequence in the file musplfm.aa with the sequences in the file lcbo.aa, shuffling \fClcbo.aa\fP 1000 times. Shuffles can also be specified with the -k # option. .TP (3) .B prfx34 mgstm1.esq xurt8c.aa 2 1000 .PP Translate the DNA sequence in the \fCmgstm1.esq\fP file in all six frames and compare it to the amino acid sequence in the file \fCxurt8c.aa\fP, using ktup=2 and shuffling \fCxurt8c.aa\fP 1000 times. Each comparison considers the best forward or reverse alignment with frameshifts, using the fastx algorithm (Pearson et al (1997) Genomics 46:24-36). .TP (4) .B prss34/prfx34 .PP Run prss in interactive mode. The program will prompt for the file name of the two query sequence files and the number of shuffles to be used. .SH OPTIONS .PP .B prss34/prfx34 can be directed to change the scoring matrix, gap penalties, and shuffle parameters by entering options on the command line (preceeded by a `\-'). All of the options should preceed the file names number of shuffles. .TP \-A Show unshuffled alignment. .TP \-f # Penalty for opening a gap (-10 by default for proteins). .TP \-g # Penalty for additional residues in a gap (-2 by default) for proteins. .TP \-H Do not display histogram of similarity scores. .TP \-k # Number of shuffles (200 is the default) .TP \-Q -q "quiet" - do not prompt for filename. .TP \-O filename send copy of results to "filename." .TP \-s str specify the scoring matrix. BLOSUM50 is used by default for proteins; +5/-4 is used by defaul for DNA. .B prss34 recognizes the same scoring matrices as fasta34, ssearch34, fastx34, etc; e.g. BL50, P250, BL62, BL80, MD10, MD20, and other matrices in BLAST1.4 matrix format. .TP \-v # Use a local window shuffle with a window size of #. .TP \-z # Calculate statistical significance using the mean/variance (moments) approach used by fasta34/ssearch or from maximum likelihood estimates of lambda and K. .TP \-Z # Present statistical significance as if a '#' entry database had been searched (e.g. "-Z 50000" presents statistical significance as if 50,000 sequences had been compared). .SH ENVIRONMENT VARIABLES .PP .B (SMATRIX) the filename of an alternative scoring matrix file. For protein sequences, BLOSUM50 is used by default; PAM250 can be used with the command line option .B -s P250\c (or with -s pam250.mat). BLOSUM62 (-s BL62) and PAM120 (-S P120). .SH "SEE ALSO" ssearch3(1), fasta3(1). .SH AUTHOR Bill Pearson .br wrp@virginia.EDU fasta36-36.3.8i_14-Nov-2020/doc/ps_lav.1000066400000000000000000000012051433453312700167760ustar00rootroot00000000000000.TH PS_LAV 1 local .SH NAME ps_lav [-B] [-Z db_size] \- plot an "lav" file in postscript. .SH DESCRIPTION ps_lav is a simple program to take "lav" format output from "lalign35" and produce postscript alignment plots (which look like "dot-plots"). It was designed to work with the output of the \fClalign35\fP program, but should work with other \fClav\fP output as well. .TP \-B color alignment lines using the "bit" score. .TP \-Z db_size set the effective database size for an E()-value calculate to db_size, and color alignment lines using E()-values. Requires bit scores in the \fClav\fP ouput. .SH AUTHOR Bill Pearson .br wrp@virginia.EDU fasta36-36.3.8i_14-Nov-2020/doc/readme.md000077700000000000000000000000001433453312700216412README_v36.3.8i.mdustar00rootroot00000000000000fasta36-36.3.8i_14-Nov-2020/doc/readme.v30000066400000000000000000000020561433453312700172240ustar00rootroot00000000000000 Because of interdependencies in the Makefile, sometimes you must type "make" a second time to get everything built. June 12, 1996 - fasta30t1 Fixed bug in reading blast-format DNA sequence files. Fixed core-dump for some large libraries on some machines. June 19, 1996 - fasta30t2 Fixed a serious bug in the Smith-Waterman alignment routines used by both fasta3 (dropnfa.c) and ssearch3 (dropgsw.c) that caused the amount of memory required to depend on the library sequence size, rather than the query sequence size. Fixed some memory-overwrite errors in showalign.c June 27, 1996 - fasta30t3 Found and fixed bugs in comp_thr.c and nxgetaa.c that caused core dumps when reading DNA libraries with long sequences in fasta format. July 6, 1996 - fasta30t4 ibm_pthread_subs.c available, Makefile.ibm for multiprocessor IBM RS/6000 AIX systems. Finally (?) fixed the previous bug that caused core dumps when reading DNA libraries in fasta format. Corrections to the fastx algorithm. July 10, 1996 Fixed reading of compressed GCG DNA format. fasta36-36.3.8i_14-Nov-2020/doc/readme.v30t6000066400000000000000000000035171433453312700175010ustar00rootroot00000000000000 >>August 24, 1996 New programs - tfastx3, tfastx3_t, compare a protein sequence to forward and reverse translations of a DNA sequence database. An excellent replacement for tfasta3. Sun multiprocessing - change in thr_create() to use all CPU's if available. GCG formats - now can search with simple GCG-format query sequences and results with GCG format Swissprot and Genpept are more readable. >>August 26, 1996 Fixed bugs in tfastx3(_t) and fastx3(_t) including an ancient problem with aatran(). Less redundancy in gcg_ranlib(). >>August 31, 1996 Included support for BLOSUM62 (-s BL62) as per documentation. Rearranged Makefile's so that they would make everything in one pass. >>September 6, 1996 Corrected yet another problem with the fastx/tfastx code. Noticed that searching without optimized scores gave no optimized scores on the final list of scores - fixed this. The pvm version now does alignments - not thoroughly tested. >>September 13, 1996 Fixed display of best scores to stdout. Fixed problem with alignments when -o flag used. pvcompfa/pvcompsw have now been tested on DEC Alpha, Solaris X86, and SGI PVM implementations. Several bugs were corrected. >>September 18, 1996 Fixed bug selectbestz() that caused core dumps in pvcomplib.c (changes to pvcomplib.c, comp_thr.c, complib.c). >>September 23, 1996 Corrected showalign.c/pvm_showalign.c addressing bug found and fixed by Erik Wallin. (erikw@biokemi.su.se). >>October 15, 1996 Corrected bug so alternative scoring matrices are used. >>October 22, 1996 Remove singularities from regression routine. -z 0 now means no statistics (same as -z -1). No longer show alignment for 0 score. >>October 26, 1996 Fix problem with -b, -d when Z-values disabled. >>November 1, 1996 Altschul-Gish statistical estimates (-z 3) now work properly. Fix problem with mean_var==0.0. fasta36-36.3.8i_14-Nov-2020/doc/readme.v30t7000066400000000000000000000122431433453312700174760ustar00rootroot00000000000000>> October 30, 1996 A new program, sc_to_e, can be used to calculate expectation values from the regression coefficients reported from a search. The expectation value is based on similarity score, sequence length, and database size. >> November 8, 1996 fasta30t7 differs from fasta30t6 in the amount of information provided with the -m 10 option. (1) The query and library sequence identifiers are no longer abbreviated. (2) New information about the program and program version are provided: The new information provided is: mp_name: program name (actually argv[0]) mp_ver: main program version (can be different from function version) mp_argv: command line arguments (duplicates argv[0]) Some statistical information is provided as well: mp_extrap: XXXX YYY - statistics extrapolated from XXX to YYY mp_stats: indicates type of statistics used for E() value mp_KS: Kolmogorov-Smirnoff statistic The "mp_" (main program) information is function independent, while the "pg_" information is produced by a particular comparison function (ssearch, fastx, fasta, etc). "pg_" should probably be called "fn_", and "mp_" called "pg_", but I remain backwards compatible. (3) The end of the "parseable" records is denoted with: >>><<< (4) There now an compile-time option -DM10_CONS, that allows you to display a final alignment summary: ;al_cons: .::.:- .:: .. :. .:.---: : .--.:. : .. .--- ..: :: ... :..: .::.:. . .---. . .: : . . . : .. . :..: .--. . : .:. .. : . .:.::: ..:. : or, if M10_CONS_L is defined (in addition to M10_CONS), the output is: ;al_cons: p==p=-mmmp==mpzmm=pmmmmz=p---=mmm=mmp--p=zm=m pzmmp---mmzp=m==mzzzm=zp=mz==z=pmzmmz---pmmpmmmp=m m=mzmmzmpm=mmmmppmmmpmmmm=pp=mp--pmpm=mp=pmzzm=mmp mp=z===mmpz=zm= where '=' indicates identical residues, '-' a gap in one or the other sequence, 'p' indicates a positive pam value, 'm' indicates a negative pam value, and 'z' indicates a zero pam value. A typical run now looks like: >>>gtm1_mouse.aa, 217 aa vs s library ; mp_name: fasta3_t ; mp_ver: version 3.0t7 November, 1996 ; mp_argv: fasta3_t -q -m 10 gtm1_mouse.aa s ; pg_name: FASTA ; pg_ver: 3.06 Sept, 1996 ; pg_matrix: BL50 ; pg_gap-pen: -12 -2 ; pg_ktup: 2 ; pg_optcut: 24 ; pg_cgap: 36 ; mp_extrap: 50000 51933 ; mp_stats: Expectation fit: rho(ln(x))= 5.8855+/-0.000527; mu= 1.5386+/- 0.029; mean_var=73.0398+/-15.283 ; mp_KS: 0.0133 (N=29) at 42 >>GTM1_MOUSE GLUTATHIONE S-TRANSFERASE GT8.7 (EC 2.5.1.18) (GST 1-1) (CLASS-MU). ; fa_initn: 1490 ; fa_init1: 1490 ; fa_opt: 1490 ; fa_z-score: 1754.6 ; fa_expect: 0 ; sw_score: 1490 ; sw_ident: 1.000 ; sw_overlap: 217 >GTM1_MOUSE .. ; sq_len: 217 ; sq_type: p ; al_start: 1 ; al_stop: 217 ; al_display_start: 1 PMILGYWNVRGLTHPIRMLLEYTDSSYDEKRYTMGDAPDFDRSQWLNEKF KLGLDFPNLPYLIDGSHKITQSNAILRYLARKHHLDGETEEERIRADIVE NQVMDTRMQLIMLCYNPDFEKQKPEFLKTIPEKMKLYSEFLGKRPWFAGD KVTYVDFLAYDILDQYRMFEPKCLDAFPNLRDFLARFEGLKKISAYMKSS RYIATPIFSKMAHWSNK >GTM1_MOUSE .. ; sq_len: 217 ; sq_type: p ; al_start: 1 ; al_stop: 217 ; al_display_start: 1 PMILGYWNVRGLTHPIRMLLEYTDSSYDEKRYTMGDAPDFDRSQWLNEKF KLGLDFPNLPYLIDGSHKITQSNAILRYLARKHHLDGETEEERIRADIVE NQVMDTRMQLIMLCYNPDFEKQKPEFLKTIPEKMKLYSEFLGKRPWFAGD KVTYVDFLAYDILDQYRMFEPKCLDAFPNLRDFLARFEGLKKISAYMKSS RYIATPIFSKMAHWSNK >>GTM1_RAT GLUTATHIONE S-TRANSFERASE YB1 (EC 2.5.1.18) (CHAIN 3) (CLASS-MU). ; fa_initn: 1406 ; fa_init1: 1406 ; fa_opt: 1406 ; fa_z-score: 1656.3 ; fa_expect: 0 ; sw_score: 1406 ; sw_ident: 0.931 ; sw_overlap: 217 >GTM1_MOUSE .. ; sq_len: 217 ; sq_type: p ; al_start: 1 ; al_stop: 217 ; al_display_start: 1 PMILGYWNVRGLTHPIRMLLEYTDSSYDEKRYTMGDAPDFDRSQWLNEKF KLGLDFPNLPYLIDGSHKITQSNAILRYLARKHHLDGETEEERIRADIVE NQVMDTRMQLIMLCYNPDFEKQKPEFLKTIPEKMKLYSEFLGKRPWFAGD KVTYVDFLAYDILDQYRMFEPKCLDAFPNLRDFLARFEGLKKISAYMKSS RYIATPIFSKMAHWSNK >GTM1_RAT .. ; sq_len: 217 ; sq_type: p ; al_start: 1 ; al_stop: 217 ; al_display_start: 1 PMILGYWNVRGLTHPIRLLLEYTDSSYEEKRYAMGDAPDYDRSQWLNEKF KLGLDFPNLPYLIDGSRKITQSNAIMRYLARKHHLCGETEEERIRADIVE NQVMDNRMQLIMLCYNPDFEKQKPEFLKTIPEKMKLYSEFLGKRPWFAGD KVTYVDFLAYDILDQYHIFEPKCLDAFPNLKDFLARFEGLKKISAYMKSS RYLSTPIFSKLAQWSNK ;al_cons: :::::::::::::::::.:::::::::.::::.::::::.:::::::::: ::::::::::::::::.::::::::.::::::::: :::::::::::::: :::::.:::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::..::::::::::::.::::::::::::::::::: ::..::::::.:.:::: >>><<< 217 residues in 1 query sequences 18531385 residues in 52205 library sequences Tcomplib (4 proc)[version 3.0t7 November, 1996] start: Fri Nov 8 18:20:26 1996 done: Fri Nov 8 18:20:41 1996 Scan time: 38.434 Display time: 2.166 Function used was FASTA ================================================================ >> November 11, 1996 --> v30t71 Made changes to complib.c, comp_thr.c, nxgetaa.c to allow scoring matrix to be modified in fastx3, fastx3_t. ================================================================ >> November 15, 1996 --> v30t72 nxgetaa.c now accepts query sequences from "stdin" by using "-" as the input file name. If DNA sequences are read in this mode, the "-n" option must be used. > November 23, 1996 Included code in nxgetaa.c and Makefile.sgi to get around a bug in SGI's sscanf() that prevented compressed GCG databases from being read properly. fasta36-36.3.8i_14-Nov-2020/doc/readme.v31t0000066400000000000000000000105551433453312700174740ustar00rootroot00000000000000 >>November 1, 1997 --> v31t0 version 31t of the fasta program package uses a more modular structure for comparison functions. In addition to modular functions to initialize, calculate and align sequences, v31 provides a modular function for creating the alignment display. This was required for fasty and fastf, which have very different alignment strategies from the other search programs. >>February 13, 1998 modified nascii[] so that 0, 1, 2 are no longer end of sequence characters. prss3 added. Unlike prss, prss3 uses -d # to specify the number of shuffles. >>March 18, 1998 First public release. Corrected problems with dropfz.c (which is used in fasty3, tfasty3). Makefile is well tested, but other Makefile's are not. PVM versions not tested. >>March 19, 1998 Problem with unthreaded tfastx3, tfasty3 caused by bug in complib.c fixed. All Makefiles (Makefile.alpha Makefile.sun, Makefile.sgi, Makefile.linux) have been tested and work properly. Threaded versions do not work on linux (yet). Function labeling problems with fasty3, tfasty3 corrected. >>March 20, 1998 --> v31t02 Fixed problem with inconsistent openlib() calls that broke BLAST databases on some platforms. >>March 27, 1998 --> v31t04 Fixed a long standing problem with fastx/tfastx and fasty/tfasty that caused various memory allocation problems and core dumps. The PVM version works again, but cannot produce alignments. The change in the location of the modular display functions will require significant changes in the pvm display functions. For the moment, showalign() has been commented out. Code tested on Macintosh without changes. Added some additional information in the results file. Please report bugs to wrp@virginia.edu >>April 3, 1998 Removed some debugging code in faatran.c now that fastx/fasty bugs seem corrected. FASTA --> v3.14 Corrected uninitialized array elements in dropnfa.c. >>April 10, 1998 Added facility for specifying SRCH_URL (the URL string that will be used to re-search the database) and REF_RUL (the URL string that will be used to lookup the sequence) ini url_subs.c. This allows perl scripts to provide different databases for re-searching dynamically. >>April 16, 1998 --> v31t05 Corrected problem with ignoring ','s in databases (','s are found in PIR). >>April 18, 1998 Corrected some problems with sequence names for Entrez lookups and re-searching databases. Made minor modifications to nxgetaa.c and compacc.c for compatibility with Borland 'C' compiler for Win32 systems. Including makefile.tc fasta.rsp, prss.rsp, and test.bat for Borland 'C'/win32. >>April 24, 1998 --> v31t06 Fixed another bug in fasty3/tfasty3 alignment routines. Added additional information to the do_url1() (url_subs.c) function. The re-search URL can now reference the start, stop, and length of the library sequence to be re-searched with. For DNA library sequences, these values are always in nucleotides, even with tfasta/x/y. >>May 12, 1998 (no version change as v31t06 was not released prior to this) Correct nxgetaa.c GETLIB to deal correctly with BLAST NR database sequences with exceptionally long title lines. Fix bug with long -O results files. >>May 18, 1998 --> v31t07 Corrected some bugs in information string lengths (e.g. gstring1, stat_str), disabling statistics with -z 0, translation of 'X' by saatran() (faatran.c) that caused problems with FASTX. A serious bug has been fixed in the FASTX alignment routines. For some pathological sequences, % identity increases from < 10% to 40%. The version number of the main program has not changed, but the version number of the fastx function has changed to 3.2. >>June 19, 1998 --> v31t08 Corrected some problems with alignments with -m 10. Added -Z db_size option to modify apparent database size for expectation value calculation (used only for protein/protein FASTA and SSEARCH, FASTX, FASTY, TFASTX, and TFASTY). >>July 1, 1998 (no version change) Corrected size of lbnames[], lb_size[] in structs.h to accomodate MAX_LF files. >>July 13, 1998 --> v31t09 Corrected problem in nxgetaa.c encountered when reading long sequences (that must be split) in fasta format. Corrected problem in statistics calculation encountered with a small number of very long DNA sequences. >>July 17, 1998 (no version change, date change for ssearch3) Corrected default expectation cutoff (it was 10, now it is 2.0) for DNA with ssearch3. fasta36-36.3.8i_14-Nov-2020/doc/readme.v31t1000066400000000000000000000070601433453312700174720ustar00rootroot00000000000000>>July 22, 1998 --> v31t10 Corrected problem with histogram when unscaled statistics used (e.g. prss3). Corrected problems with prss3 shuffled sequence prompt. Provided option to enter number of shuffles, window size, for prss3. Number of shuffles for prss3 can be entered as an option (-d #) or as the third argument on the command line (prss3 query lib 1000). Modified nrand.c, nrand48.c to use time to set random number. Corrected problems reading GCG formatted files with prss3. Corrected various problems with pvcomp* programs, but they still do not produce alignments with version 3.1. Two new programs, fastf3(_t) and tfastf3(_t) are available. These programs compare a set of mixed peptide sequences from an Edman sequencer to a protein (fastf3) or DNA (tfastf3) database, using the database sequences to de-convolve the peptide mixture. See fastf3.1 >>August 11, 1998 (no version change) Modified initfa.c so that using '-n' on the fastx/fasty command line would not cause problems. Changed labeling of query sequence length for fastx/fasty from 'aa' to 'nt'. >>August 18, 1998 (no version change) Modified complib.c, comp_thr.c scaleswn.c, to report E()-value for only one related sequence if -z 3 is used. >>August 23, 1998 -->v31t11 Some serious problems with prss3 have been corrected: (1) use dropnsw.c rather than dropgsw.c for more accurate low scores (2) modify estimation program; use scaleswe.c rather than scaleswn.c. scaleswe.c has some improvements for estimation by moments and can use MLE as well as mu/var (-z 3). (3) add p() estimate. (4) correct bugs in nrand48, which caused bad sequences for llgetaa.c (5) -Z number works properly for prss3 and other programs (fixed histogram). (6) a new program, ssearch3e, is available that uses the same scaling routines as prss3 (scaleswe.c). prss3 will save the random sequences it generates when the -r file option is given; the sequences are in file_rlib. ssearch3e (or ssearch3 or fasta) can then do a search on exactly the same sequences that were used by prss3. A bug reading GCG format compressed DNA databases was fixed. Fixed a bug that caused query sequence not to be displayed with -m 10. Simple optimization in dropnfa.c improves performance 10%. >>Sept. 1, 1998 (no version change) Modified nxgetaa.c to recognize "ACGTX" as nucleotides. >>Sept. 7, 1998 --> v31t12 Added -z 11 - 15, which use shuffled sequences, rather than real sequences to calculate statistical estimates. Because a shuffled sequence score is calculated for each sequence score, the search process takes twice as long. In this first version, codons are not preserved during shuffles, so tfasta/x/y shuffles may not be as informative as they should be. Also fix a problem with prss3 shuffles. >>Sept. 14, 1998 (no version change; previous version not released) Corrected bugs in tfastx3/tfasty3 caused by using the -3 option with or without -i. With the bug fixes; "-3" and "-3 -i" work as expected; "-3" gives the forward three frames, while "-3 -i" gives the reverse three frames. In addition, tfasta3/tfasta3_t was upgraded to perform the same way that tfastx/y3 does - i.e. a search with "-i -3" searches only frames 4,5, and 6, while "-3" searches only frames 1, 2, and 3. >>Sept. 29, 1998 --> v31t13 Corrected bugs in dropfx.c that were corrected in fasta30 last May, but lingered in fasta31. Also included code to ensure that tfastx/y alignments against long introns would not overrun the alignment buffer. Instead of overrunning the buffer, the message: ***aligment truncated *** is displayed. fasta36-36.3.8i_14-Nov-2020/doc/readme.v32t0000066400000000000000000000367411433453312700175020ustar00rootroot00000000000000 FASTX/Y and FASTA (DNA) are now half as fast, because the programs now search both the forward and reverse strands by default. The documentation in fasta3x.me/fasta3x.doc has been substantially revised. >>October 9, 1999 --> v32t08 (no version number change) Added "-M low-high" option, where low and high are inclusion limits for library sequences. If a library sequence is shorter than "low" or longer than "high", it will not be considered in the search. Thus, "-M 200-250" limits the database search to proteins between 200 and 250 residues in length. This should be particularly useful for fasts3 and fastf3. This limit applies only to protein sequences. Modified scaleswn.c to fall back to maximum likelihood estimates of lambda, K rather than mean/variance estimates. (This allows MLE estimation to be used instead of proc_hist_n when a limited range of scores is examined.) >>October 20, 1999 (no version change) Modify nxgetaa.c/nmgetaa.c to recognize 'N' as a possible DNA character. >>October 9, 1999 --> v32t08 (no version number change) Added "-M low-high" option, where low and high are inclusion limits for library sequences. If a library sequence is shorter than "low" or longer than "high", it will not be considered in the search. Thus, "-M 200-250" limits the database search to proteins between 200 and 250 residues in length. This should be particularly useful for fasts3 and fastf3. -M -500 searches library sequences < 500; -M 200 - searches sequences > 200. This limit applies only to protein sequences. Modified scaleswn.c to fall back to maximum likelihood estimates of lambda, K rather than mean/variance estimates. (This allows MLE estimation to be used instead of proc_hist_n when a limited range of scores is examined.) >>October 2, 1999 --> v32t08 Many changes: (1) memory mapped (mmap()ed) database reading - other database reading fixes (2) BLAST2 databases supported (3) true maximum likelihood estimates for Lambda, K (4) Misc. minor fixes (1) (Sept. 26 - Oct. 2, 1999) Memory mapped database access. It is now possible to use mmap()ed access to FASTA format databases, if the "map_db" program has been used to produce an ".xin" file. If USE_MMAP is defined at compile time and a ".xin" file is present, the ".xin" will be used to access sequences directly after the file is mmap()ed. On my 4-processor Alpha, this can reduce elapsed time by 50%. It is not quite as efficient as BLAST2 format, but it is close. Currently, memory mapping is supported for type 0 (FASTA), 5 (PIR/GCG ascii), and 6 (GCG binary). Memory mapping is used if a ".xin" file is present. ".xin" files are created by the new program "map_db". The syntax for "map_db" is: map_db [-n] "/dir/database.fa" which creates the file /dir/database.fa.xin. Library types can be included in the filename; thus: map_db -n "/gcggenbank/gb_om.seq 6" would be used for a type 6 GCG binary file. The ".xin" file must be updated each time the database file changes. map_db writes the size of the database file into the ".xin" file, so that if the database file changes, making the ".xin" offset information invalid, the ".xin" file is not used. "list_db" is provided to print out the offset information in the ".xin" file. (Oct 2, 1999) The memory mapping routines have been changed to allow several files to be memory mapped simultaneously. Indeed, once a database has been memory mapped, it will not be unmap()ed until the program finishes. This fixes a problem under Digital Unix, and should make re-access to mmap()ed files (as when displaying high scores and alignments) much more efficient. If no more memory is available for mmap()ing, the file will be read using conventional fread/fgets. (Oct 2, 1999) The names of the database reading functions has been changed to allow both Blast1.4 and Blast2.0 databases to be read. In addition, Makefile.common now includes an option to link both ncbl_lib.o and ncbl2_lib.o, which provides support for both libraries. However, Blast1.4 support has not been tested. The Makefile structure has been improved. Each architecture specific Makefile (Makefile.alpha, Makefile.linux, etc) now includes Makefile.common. Thus, changes to the program structure should be correct for all platforms. "map_db" and "list_db" are not made with "make all". The database reading functions in nxgetaa.c can now return a database length of 0, which indicates that no residues were read. Previously, 0-length sequences returned a length of 1, which were ignored. Complib.c and comp_thr.c have changed to accommodate this modification. This change was made to ensure that each residue, including the last, of each sequence is read. Corrected bug in nxgetaa.c with FASTA format files with very long (>512 char) definition lines. (2) (September 20, 1999) BLAST2 format databases supported This release supports NCBI Blast2.0 format databases, using either conventional file reading or memory mapped files. The Blast2.0 format can be read very efficiently, so there is only a modest improvement in performance with memory mapping. The decision to use mmap()'ed files is made at compile time, by defining USE_MMAP. My thanks to Eamonn O'Toole of DEC/Compaq, and Daryl Madura of Sun Microsystems, for providing mmap()'ed modifications to fasta3. On my machines, Blast2.0 format reduces search time by about 30%. At the moment, ambiguous DNA sequences are not decoded properly. (3) (September 30, 1999) A new statistical estimation option is available. -z 2 has been changed from ln()-scaling, which never should have been used, to scaling using Maximum Likelihood Estimates (MLEs) of Lambda and K. The MLE estimation routines were written by Aaron Mackey, based on a discussion of MLE estimates of Lambda and K written by Sean Eddy. The MLE estimation examines the middle 95% of scores, if there are fewer than 10000 sequences in the database; otherwise it excludes (censors) the top 250 scores and the bottom 250 scores. This approach seems to effectively prevent related sequences from contaminating the estimation process. As with -z 1, -z 12 causes the program to generate a shuffled sequence score for each of the library sequences; in this case, no censoring is done. If the estimation process is reliable, Lambda and K should not vary much with different queries or query lengths. Lambda appears not to vary much with the comparison algorithm, although K does. (4) Minor changes include fixes to some of the alignment display routines, individual copies of the pstruct structure for each thread, and some changes to ensure that every last residue in a library is available for matching (sometime the last residue could be ignored). This version has undergone extensive testing with high-throughput sequences to confirm that long sequences are read properly. Problems with fastf3/fasts3 alignment display have also been addressed. >>August 26, 1999 (no version change - not released) Corrected problem in "apam.c" that prevented scoring matrices from being imported for [t]fasts3/[t]fastf3. >>August 17, 1999 --> v32t07 Corrected problem with opt_cut initialization that only appeared with pvcomp* programs. Improved calculation of FASTA optcut threshold for DNA sequence comparison for match scores much less than +5 (e.g. +3). The previous optcut theshold was too high when the match penalty was < 4 and ktup=6; it is now scaled more appropriately. Optcut thresholds have also been raised slightly for fastx/y3/tfastx/y3. This should improve performance with minimal effects on sensitivity. >>July 29, 1999 (no version change - date change) Corrected various uninitialized variables and buffer overruns detected. >>July 26, 1999 - new distribution (no version change - v32t06, previous version not released) Changed the location of "(reverse complement)" label in tfasta/x/y/s/f programs. Statistical calculations for tfasta/x/y in unthreaded version corrected. Statistical estimates for threaded and unthreaded versions of the tfasta/x/y/s/f programs should be much more consistent. Substantial modifications in alignment coordinate calculation/ presentation. Minor error in fastx/y/tfastx/y end of alignment corrected. Major problems with tfasta alignment coordinates corrected. tfasta and tfastx/y coordinates should now be consistent. Corrected problem with -N 5000 in tfasta/x/y3(_t) searches encountered with long query sequences. Updated pthr_subs.c/Makefile.linux to increase the pthreads stacksize to try to avoid "cannot allocate diagonal arrays" error message. Pthreads stacksize can be changed with RedHat 6.0, but not RedHat 5.2, so Makefile.linux uses -DLINUX5 for RedHat5.* (no pthreads stack size). I am still getting this message, so it has not been completely successful. Makefile.linux now uses -DALLOCN0 to avoid this problem, at some cost in speed. The pvcomp* programs have been updated to work properly with forward/reverse DNA searches. See readme.pvm_3.2. >>July 7, 1999 - not released --> v32t06 Corrected bug in complib.c (fasta3, fastx3, etc) that caused core dumps with "-o" option. Corrected a subtle bug in fastx/y/tfastx/y alignment display. >>June 30, 1999 - new distribution (no version change) Corrected doinit.c to allow DNA substitution matrices with -s matrix option. Changed ".gbl" files to ".h" files. >>June 2 - 9, 1999 - new distribution (no version change) Added additional DNA lambda/K/H to alt_param.h. Corrected some other problems with those table. for the case where (inf,inf) gap penalties were not included. Fixed complib.c/comp_thr.c error message to properly report filename when library file is not found. Included approximate Lambda/K/H for BL80 in alt_parms.h. BL80 scoring matrix changed from 1/3 bit to 1/2 bit units. Included some additional perl files for searchfa.cgi, searchnn.cgi in the distribution (my-cgi.pl, cgi-lib.pl). >>May 30, 1999, June 2, 1999 - new distribution (no version number change) Added Makefile.NetBSD, if !defined(__NetBSD__) for values.h. Changed zs_to_E() and z_to_E() in scaleswn.c to correctly calculate E() value when only one sequence is compared and -z 3 is used. >>May 27, 1999 (no version number change) Corrected bug in alignment numbering on the % identity line 27.4% identity in 234 aa (101-234:110-243) for reverse complements with offset coordinates (test.aa:101-250) >>May 23, 1999 (no version number change) Correction to Makefile.linux (tgetaa.o : failed to -DTFAST). >>May 19, 1999 (no version number change) Minor changes to pvm_showalign.c to allow #define FIRSTNODE 1. Changes to showsum.c to change off-end reporting. (Neither of these changes is likely to affect anyone outside my research group.) >>May 12, 1999 --> v32t05 Fixed a serious bug in the fastx3/tfastx3 alignment display which caused t/fastx3 to produce incorrect alignments (and incorrectly low percent identities). The scores were correct, but the alignment percent identities were too low and the alignments were wrong. Numbering errors were also corrected in fastx3/tfastx3 and fasty3/tfasty3 and when partial query sequences were used. >>May 7, 1999 Fixed a subtle bug in dropgsw.c that caused do_work() to calculate incorrect Smith-Waterman scores after do_walign() had been called. This affected only pvcompsw searches with the "-m 9" option. >>May 5, 1999 Modified showalign.c to provide improved alignment information that includes explicitly the boundaries of the alignment. Default alignments now say: Smith-Waterman score: 175; 24.645% identity in 211 aa overlap (5:207-7:207) >>May 3, 1999 Modified nxgetaa.c, showsum.c, showbest.c, manshowun.c to allow a "not" superfamily annotation for the query sequence only. The goal is to be able to specify that certain superfamily numbers be ignored in some of the search summaries. Thus, a description line of the form: >GT8.7 | 40001 ! 90043 | transl. of pa875.con, 19 to 675 says that GT8.7 belongs to superfamily 40001, but any library sequences with superfamily number 90043 should be ignored in any listing or summary of best scores. In addition, it is now possible to make a fasta3r/prcompfa, which is the converse of fasta3u/pucompfa. fasta3u reports the highest scoring unrelated sequences in a search using the superfamily annotation. fasta3r shows only the scores of related sequences. This might be used in combination with the -F e_val option to show the scores obtained by the most distantly related members of a family. >>April 25, 1999 -->v32t04 (not distributed) Modified nxgetaa.c to remove the dependence of tgetaa.o on TFASTA (necessary for a more rational Makefile structure). No code changes. >>April 19, 1999 Fixed a bug in showalign.c that displayed incorrect alignment coordinates. (no version number change). >>April 17, 1999 --> v32t03 A serious bug in DNA alignments when the sequence has been broken into multiple segments that was introduced in version fasta32 has been fixed. In addition, several minor problems with -z 3 statistics on DNA sequences were fixed. Added -m 9 option, which unfortunately does different things in pvcompfa/sw and fasta3/ssearch3. In both programs, -m 9 provides the id's of the two sequences, length, E(), %_ident, and start and end of the alignment in both sequences. pvcompfa/sw provides this information with the list of high scoring sequences. fasta3/ssearch3 provides the information in lieu of an alignment. >>March 18, 1999 --> v32t02 Added information on the algorithm/parameter description line to report the range of the pam matrices. Useful for matrices like MD_10, _20, and _40 which require much higher gap penalties. >>March 13, 1999 (not distributed) --> v32t01 -r results.file has been changed to -R results.file to accomodate DNA match/mismatch penalties of the form: -r "+1/-3". >>February 10, 1999 Modify functions in scalesw*.c to prevent underflow after exp() on Alpha Linux machines. The Alpha/LINUX gcc compiler is buggy and doesn't behave properly with "denormalized" numbers, so "gcc -g -m ieee" is recommended. Add "Display alignments also (y/n)[n] " pvcomplib.c again provides alignments!! In addition, there is a new "-m 9" option, which reports alignments as: >>>/home/wrp/slib/hlibs/hum0.aa#5>HS5 gi:1280326 T-cell receptor beta chain 30 aa, 30 aa vs /home/wrp/slib/hlibs/hum0.seg library HS5 30 HS5 30 1.873e-11 1.000 30 1 30 1 30 HS5 30 HS2249 40 1.061e-07 0.774 31 1 30 7 37 HS5 30 HS2221 38 1.207e-07 0.833 30 1 30 7 35 HS5 30 HS2283 40 1.455e-07 0.774 31 1 30 7 37 HS5 30 HS2239 38 1.939e-07 0.800 30 1 30 7 35 where the columns are: query-name q-len lib-name lib-len E() %id align-len q-start q-end l-start l-end >>February 9, 1999 Corrected bug in showalign.c that offset reverse complement alignments by one. >>Febrary 2, 1999 Changed the formatting slightly in showbest.c to have columns line up better. >>January 11, 1999 Corrected some bugs introduced into fastf3(_t) in the previous version. >>December 28, 1998 Corrected various problems in dropfz.c affecting alignment scores and coordinates. Introduced a new program, fasts3(_t), for searching with peptide sequences. >>November 11, 1998 --> v32t0 Added code to correct problems with coordinate number in long library sequences with tfastx/tfasty. With this release, sequences should be numbered properly, and sequence numbers count down with reverse complement library sequences. In addition, with this release, fastx/y and tfastx/y translated protein alignments are numbered as nucleotides (increasing by 3, labels every 30 nucleotides) rather than codons. fasta36-36.3.8i_14-Nov-2020/doc/readme.v33t0000066400000000000000000001427751433453312700175100ustar00rootroot00000000000000 $Id: readme.v33t0 342 2010-06-28 19:57:56Z wrp $ $Revision: $ ================ readme.v33t0 ================ This release includes an MPI implementation of the parallel library-vs-library comparison code. See readme.mpi_3.3 and readme.pvm_3.3 for more information. ===== >>July 9, 2001 Considerable changes to support no-global library functions. (1) Separate ascii/sequence mapping arrays are used by the query-reading (qascii), library-reading (lascii), and sequence comparison function (pascii) routines. As a result, there is no longer a need for tgetlib.o/lgetlib.o - lgetlib.o can serve both functions. (2) This also allows us to remove all #ifdef TFAST/FASTX conditionals from complib.c/comp_thr.c/p2_complib.c. We no longer need tcomp_thr.o, comp_thrx.o, etc. We still have a variety of p2_complib.o variations to support the different c34.work* files. (3) Because non-global openlib/getlib functions are available, exactly the same open/get functions are available for reading both the query and reference libraries in pv34comp* programs. The host-specific openlib/getlib functions in hxgetaa.c are now provided by nmgetlib.c, etc. This has two effect: (a) it is now possible to compare a query database generated by an SQL query to a library database generated by a different SQL query. (b) pv34comp* has lost (at least in this version) the ability to automatically detect the query sequence type. To search with a DNA query, you MUST use "-n". (4) the resetp() function is now responsible for almost all of the function sepcific (TFAST/FASTX/etc) initializations. All of the function specific code has been removed from complib.c/comp_thr.c and most of it has been moved to initfa.c/resetp(). (5) manageacc.c has been merged into compacc.c (mostly prhist()). (6) Although it may reflect a subtle bug in my code, it is not possible to reliably run threaded/memory mapped versions of the fasta34_t code. I have spent considerable time tracking down the problem, and have determined that, in threaded code, something happens during the thread initialization to corrupt the description offset information used when files are memory mapped. This never occurs when the unthreaded versions of the code are used. And it does not occur under MacOSX, Compaq Tru64Unix, Sun Solaris/Sparc, or SGI IRIX. Thus, I cannot recommend using the threaded code versions (_t) under Linux (RH6.2 or 7.1). ===== >>June 1, 2001 Many changes to accomodate a new - no global variable - strategy for reading sequence databases. Every time a file is opened, a struct lmf_str is allocated which can be used for memory mapped files, ncbl2, files, and mysql files. In addition, an open'ed file has a default sequence type: DNA or protein, or one can open a file in a mode that will allow the sequence type to be changed. ===== >>May 18, 2001 CVS: fa33t09d0 A new compile time parameter - -DGAP_OPEN, is available to change the definition of the "-f gap-open" parameter from the penalty for the first residue in a gap to a true gap-open penalty, as is used in BLAST and many other comparison algorithms. This will probably become the default for fasta in version 3.4. Fixes to conflicts between "-S" and "-s matrix". When a scoring matrix file was specified, lower-case alignments were not displayed with -S (although the scores were calculated properly). More extensive testting of mysql_lib.c (mySQL query-libraries) with the pv4comp* and mp4comp* programs. ===== >>April 5, 2001 CVS: fa33t08d4b3 Changes in nmgetlib.c and ncbl2_mlib.c to return long sequence descriptions for PCOMPLIB (pv4/mp3comp*). Also fix p2_complib.c to request DNA library for translated comparisons. Fix for prss33(_t) to read both sequences from stdin. ===== >>March 27, 2001 CVS: fa33t08d4 --> fa33t08d4 Problems in ncbl2_mlib.c found searching NCBI non-redundant nucleotide database "nt" were fixed. Testing revealed a minor memory leak, which was fixed by modifying showbest.c, showalign.c, comp_thr.c, complib.c, and p2_complib.c to remember the last opened database file more effectively. Modifications to allow 64-bit fseek/ftell on machines like Sun, Linux/Intel, that support -D_FILE_OFFSET_BITS=64, -D_LARGE_FILE_SOURCE off_t, and fseeko(), ftello() with the option -DUSE_FSEEKO. Machines with 64-bit long's do not need this option. Machines with 32-bit longs that allow files >2 Gb can do so with 64-bit file access functions, including fseeko() and ftello(), which work with off_t file offsets instead of long's. ===== >>March 3, 2001 CVS: fa33t08d2 Corrected problems in nmgetaa.c and mysql_lib.c with parallel programs, and one serious problem with alternate DNA scoring matrices (initfa.c, initsw.c) not being set properly. A subtle problem with the merge of scaleswn.c and scaleswg.c is fixed. >>February 17, 2001 Modified mysql_lib.c to use "#", rather than "%ld", to indicate the position of the GID. This change was made because sprintf() cannot be used reliably to generate an SQL string, as '"' and '%' are used in such strings. ===== >>January 17, 2001 (no version change, date change) Minro fixes to initfa.c, initsw.c to deal with DNA scoring matrices properly. "-n -s dna.mat" is required for the sequence/matrix to be recognized as DNA. >>January 16, 2001 -->v34t00 Merge of the main CVS trunk - fa33t06 with the latest release branch, fa33t08. In addition, PCOMPLIB mods have been made to mysql_lib.c. Because p2_complib.c gets sequence description information during the first read of the database, the mysql_query must be changed to return: result[0]=GID, result[1]=description, result[2]=sequence. In the PCOMPLIB case, the other SQL queries (for GID description, sequence) are not necessary but must still be provided. ===== >>January 16, 2001 (no version change, previous version not released) changes to p2_complib.c to correct openlib() incompatibility. changes to nmgetaa.c, ncbl2_lib.c to incorporate PCOMPLIB. nxgetaa.c removed. ===== >>January 12, 2001 (no version change, previous version not released) Change to initfa.c to move ktup check from query_parm() to last_init(). ===== >>January 10, 2001 --> v33t08 Fixes to complib.c, comp_thr.c to deal properly with long query protein sequences when a short library chunk (e.g. -N 5000) was given. In the case where the chunk size is too short, it will be reset to a length which allows the search to proceed, by including an amount of new sequence that is equal to the amount of overlap sequence. scaleswn.c and scaleswg.c have been merged. v33t08 includes the initial implementation for mySQL described below for v33t07x. ====== >>Dec. 20, 2000 --> v33t07x Initial implementation of a syntax for mySQL database queries. A new file, mysql_lib.c has been added, and changes have been made to nmgetaa.c (which should now replace nxgetaa.c) and altlib.h. A mySQL database search needs a file with 4 parts: (1) description of the database, user, password (2) a select statement that generates the set of protein sequences as: UID, sequence (3) a select statement that generates a UID, description given a UID (4) a select statement that generats a single UID, sequence given a UID Each of the four parts should be separated by ';'. For example, in the database that we are using for testing, a file "demo.sql" that contains: ================ localhost taxonomy username secret; SELECT proteins.gid, proteins.sequence FROM proteins,swissprot WHERE proteins.gid=swissprot.gid AND swissprot.spid IS NOT NULL; select proteins.gid, concat(swissprot.spid," ",proteins.description) from proteins,swissprot where proteins.gid=%ld AND swissprot.gid=proteins.gid; select gid, sequence from proteins where gid=%ld; ================ will find all the proteins in the BLAST "nr" database that also have SwissProt ID's when given the command line: fasta33 -q query.aa "demo.sql 16" At least for simple queries, there is surprisingly little overhead for the search. For more complex queries involving several tables, the overhead can be significant. At the moment, libraries that need the functions in mysql_lib.c will use library type 16. We may also use file type 17 for SQL queries that return binary sequences. This implementation of mysql_lib.c was written to require a minimal amount of change to the other programs. Only nmgetaa.c and altlib.h needed to be changed to incorporate this new capability. One result of this limitation is that one cannot mix mySQL databases queries with other databases in the same search. Eventually, I would like to make a mySQL database like any other, so that several mysql database queries could be searched in the same run, and mysql databases could be mixed with other (flat file) databases, but this will require some changes in the function calls throughout the code. (Right now, the various programs do not distinguish between an openlib() that is made before searching a large database, and one before retrieving a single sequence. This must be changed for a database query like mySQL to behave like other databases. Several mySQL demo files have been provided: mysql_demo*.sql. (10 January 2001) The mySQL code has been tested on Intel Linux and Compaq/Alpha/Tru64 Unix. >>Dec. 9, 2000 Changes to apam.c that to tie different default gap penalties to alternate scoring matrices. In addition, changes to apam.c, to deal with user-specified matrices with or without '*'. >>Nov. 5, 2000 (date updated) pst.dnaseq can now have 3 values, -1, or 0-> protein, 1->DNA, and 2->other. This becomes important for thing like init_karlin_a, which needs a background frequency of residues. >>Nov. 1, 2000 Significant bug fixes for the -z 6/-z 16 option. An ininitialized variable was fixed in karlin.c, and comp_thr.c did not pass the correct composition argument type in find_zp(). The -z 6/16 option has now been tested and works correctly on Alphas, Linux x86, SGI, Sun and Mac OSX. Another problem was fixed in scaleswn.c (simplex()) that prevented the code from being reused by the pv4/mp4 complib programs. >>Oct. 9, 2000 Several changes made to accomodate Mac OSX. Longer lists of superfamily numbers now supported in p[su]4comp/m[su]4comp programs. >>Sept 25, 2000 All global variables have been removed from scaleswn.c. The last to go, db_struct db, required many edits, because until now, the fasta programs have kept two versions of the db_struct data (entries, length). One version was kept by the main program, which updated entry number and db length as sequences were read; a second copy of this information was kept by the statistical estimation routines. Now there is only one copy, which means that the E() values will be a function of the complete database, not the database with some high scoring sequences removed. >>Sept 23, 2000 Continued removal of global variables from scaleswn.c. Only one global is left, db_struct db, which contains the number of entries in the database and the number of residues. It will be the next to go (changing all the zs_to_*() functions) and scaleswn. will be free of globals. scaleswg.c is gone - scaleswn.c compiles to scaleswg.c with -DNORMAL_DIST. >>Sept 20, 2000 Removal of histogram globals required changes in p2_complib.c as well. p_complib.c has not been updated. scaleswg.c has been modified to reflect the new histogram strategy. >>Sept 19, 2000 Substantial changes to remove globals for printing histogram. m_msg now contains a hist_str, which keeps histogram information. >>Sept. 19, 2000 (no version change, previous version not released) Correct bug introduced into scaleswn.c (inithist()) by changing score2_sums[], score_sums[] from int to double. Reporting of version numbers is more consistent between fasta33, fasta33_t, and pv4compfa/mp4compfa. The programs now report the same numbers/dates in similar places. >>Sept. 15, 2000 --> v33t07 Changes to fix problems with statistical estimates when a large fraction (but not all) of the database is related. Several users reported problems when searching with rRNA genes with version 33t06. In some cases, a 100% identitical match over 1500 nt would not be statistically significant against a search of the bacterial division of Genbank. This problem was not seen with some releases of v33t05. The cause of the problem was a change between v33t05 and v33t06 to allow scoring matrices with unusual scaling to be used. In v33t05, there was a line that excluded all scores > 300 from the statistical estimation procedure. While 300 is a high score with any "normal" scoring matrix, some investigators were using matrices scaled 10X, so that a score of 300 was really a score of 30 with a conventional matrix, and should not be excluded. Unfortunately, removing the test to exclude scores > 300 meant that when a rRNA sequence was used to search the bacterial division, tens of thousands of high scoring related sequences were treated as if they were unrelated, with the result that the variance estimates were much too high, and thus high real scores had low z-scores, and thus were not statistically significant. (There appear to be more than 20,000 rRNA sequences in the bacterial division of Genbank, almost 25% of all sequences). The solution to the problem is a substantial enhancement in the strategies used to exclude high-scoring, related sequences, the -z 1, 4, and 5 parameter estimation strategies. The programs now estimate the expected high scoring sequence by calculating an ungapped Lambda and K, and then use a relatively conservative threshold for excluding scores that are higher than would be expected 0.01 times by chance. By calculating Lambda and K, we can scale the cutoff thresholds to allow scoring matrices with unusual scales. For "normal" searches, there should be little change, but there should be an improvement for searches with large numbers of related sequences in the database. As a result of testing for this change, a bug in the karlin() function used with -z 6 was found and corrected. ======= >>Sept. 9, 2000 Changes to manshowbest.c to include correct display coordinates. Significant changes to structs.h, param.h, p2_complib.c, p2_workcomp.c, to store and use a reliable a_struct for alignment coordinates. Other cosmetic changes. >>Sept. 7, 2000 Minor changes to complib.c, showrss.c, so that prss33 -q uses 200 shuffles and prss33 provides bit scores, rather than z-scores. (no version number change). Modifications to p2_complib.c to include superfamily numbers for ps4comp* ms4comp*. >>Aug 22, 2000 Changes to mmgetaa.c, ncbl2_mlib.c, dropfs.c to accomodate AIX. 00README.1st updated to reflect the current version and correct outdated information on threads. >>Aug. 3, 2000 Modifications to initpam2() in initsw.c to correct a problem with pam_x when the -S option is used. Modifications to compacc.c, scaleswn.c to ensure that residue numbers are calculated properly when more than 2 Gb of sequence is searched. >>July 12, 2000 Modifications to dropnfa.c so that DNA matches to 'N' will be included in the "ungapped %identity". Thus, a sequence that is 100% identical for 100 nt on either side of a 100 nt region that has been masked to 'NNNNN' will be reported as: "67% identical (100% ungapped)". This has been added to deal with masked BAC-end databases. It would be better if masking changed the letters to lowercase, but the mouse BAC-end sequences at TIGR use 'NNNNN'. This is currently available only for the fasta function, not [t]fast[x/y], etc, and only for DNA sequences. mk_n_pam() in apam.c modified to ensure that mismatch scores of -1 remain -1. >>June 25, 2000 Modification to nxgetaa.c, nmgetaa.c, mmgetaa.c to return Genbank Accession number as part of the descriptive string. >>June 11, 2000 (no version change - not yet released) Modifications to calcons(), calc_id(), showbest(), p_workcomp.c to provide ngap_q (number of alignment gaps in query) , ngap_l (number of gaps in library) information for -m 9 output. >>June 6, 2000 (no version change - not yet released) Modified scaleswn.c to provide better support for unconventional scoring scoring matrices, in particular, scoring matrices where every value is 50-times higher. Previous versions of the MLE estimator (-z 2) started with lambda = 0.2, which is too high for a scoring matrix going from -500:+1500. The initial estimate for lambda is now calculated using the formula: lambda = pi/sqrt(6*variance). For the default -z 1, a restriction to limit scores to a maximum of 300 for the statistical analysis was removed. >>June 3, 2000 Modified aligment output, and -m 9 and -m10, to report an "ungapped" identity as well as the traditional "gapped" identity. The traditional "gapped" identity reports the number of identities divided by the overall length of the alignment, including gaps. The "ungapped" identity does not include gaps in the length of the alignment. This new value is included for alignments that include introns; thus, a tfastx33 search might find the 100% identical genomic sequence but report the gapped percent identity if a short intron were included in the alignment (the alignment probably would not span a long exon) as 66%. The "ungapped" identity would remain 100%. The ungapped identity value is also shown in the "-m 9" output line after the "gapped" fraction identical. >>June 1, 2000 Modified -m 9 output to provide fraction identical, alignment boundary information with the initial list of high scoring sequences, just as the pv3comp and mp_comp versions do. The -m 9 option now shows the same alignment display as -m 0, but the width of the alignment is increased by 40. Thus, by default, -m 9 will show the list of best hits, with percent identity, Smith-Waterman score, and alignment boundaries initially, and then show alignments standard (-m 0) alignments with 100 residues/line. >>May 29, 2000 Correct some problems with reading data files with 's under unix. nmgetaa.c/nxgetaa.c/mmgetaa.c have been modified to convert ('\t') to (' ') in descriptive lines. ======= >>May 3, 2000 Corrected problem with very low mean_var in fit_llen() in scaleswn.c. >>May 2, 2000 (no version number change - previous version not released) Merged fasta33t05d2 with fasta33t06. Also removed restriction on "-M size-range" to proteins - the size range now can be applied to DNA as well. >>May 1, 2000 (changes to v33t05d merged into v33t06) Introduced changes to include '*' as a valid sequence character, which indicates termination. Thus, 'TGA', 'TAG', and 'TAA' are now tranlated to '*' rather than 'X', and the protein PAM matrices have been modified to provide a match score of approximately 1/2 the max identity score for a '*:*' match. Otherise, '*' is the same as 'X'. This change only affects query sequences that include a '*' to indicate an end of sequence, the '*' is not there by default. The inclusion of '*' broke some things in tfasts33, tfastf33, fasty33, and tfasty33, which were fixed today. >>March 28, 2000/April 24, 2000 --> v33t06 (a) -z 6 statistics that factor in composition (b) -smatrix-offset pam-offset parameter (a) This release provides a new statistics option, -z 6, which provides a more sophisticated model that accounts for sequence composition. When -z 6 is used (only for fasta33(_t) and ssearch33(_t)), the program calculates a composition parameter comp=1/lambda using a modified version of the Karlin-Altschul karlin() function. As a result, every sequence in the database has an associated length (n1) and composition (comp). The length n1 and composition comp are used in the maximum likelihood estimation described by Mott (1992) Bull. Math. Biol. 54:59-75. Four parameters are estimated, a0, a1, a2, and b1, and the probability of obtaining a score is then: p(s >= x) = 1-exp(-exp(-( a0 + a1*comp + a2*comp*log(n0*n1) + x)/(b1*comp))) The maximum likelihood estimates of a0, a1, a2, and b1 are calculated using the Nelder-Mead simplex search strategy. The average Lambda is reported for the search using Lambda = 1/(b1*ave_comp). Where ave_comp is the geometric mean of the comp values calculated during the statistical estimates. The "lambda/comp" calculation can fail for sequences with very biased amino acid composition. When this occurs, 'comp' is set to -1.0 (as is 'H', the information content parameter) and the 'ave_comp' value is used to calculate statistical significance. (But obviously 'ave_comp' is not really appropriate, since if the sequence had an average 'comp' value, it would have been calculated.) When -z 6 is used, the alignment display shows the 'comp' and 'H' values for that library sequence. (b) Scoring matrix offsets - The main reason that the "lamdba/comp" calculation fails is that, for the particular query/library sequence pair, the expected score is not < 0, instead, Sum {p_ij S_ij} >= 0.0. This problem is reported to 'stderr' when it occurs. The simplest solution to the problem is to provide an offset to the scoring matrix; for example, to use Blosum62 - 1, which ranges from +10 to -5, rather than the standard +11 to -4. This option used to be available with the -S offset option, but -S is now used to specify a lower-case seg-ed database. The offset can now be specified as part of the scoring matrix name. Thus, "-s BL62-1" uses Blosum62 reduced by 1 at each entry. The '-' character is used to indicate an offset, so scoring matrix files must not have a '-' in their name. Alternatively, "-s BL80+1" or "-s BL80--1" would add one to each value. nxgetaa.c, nmgetaa.c, and mmgetaa.c have been edited to avoid string run-off problems after strncpy(). Fixed problem where positive gap extension penalties in ssearch33 were not converted to negative values. >>April 8, 2000 Fixed problem in calculating corrected sequence lengths for Altschul-Gish probabilities. >>March 30, 2000 (no version change, date updated to March 30, 2000) Corrected problem with -m 9 option. The '*' character is now available to allow translated alignments to extend through the termination codon. Thus, if a protein sequence ends with a '*', and matches in to a translated termination codon, the score will be increased. The *:* match score is set to 1/2 the max positive score for the matrix (see upam.h). This strategy can also be used to upweight a match that extends all the way to the end of a full-length sequence by putting '*' at the end of both the query and library protein sequences. Recognition of '*' will probably become a command line option. >>March 21, 2000 (no version change, previous version not distributed) Changes to map_db.c, list_db.c, and mmgetaa.c to accomodate large sequence files. Long (64-bit on some systems) variables are now used to specify file and memory position for the memory mapped functions. As a result, there are now two *.xin (memory mapped index) file formats: MP0, which uses 32-bit longs, and MP1, which uses 64-bit longs. On 64-bit machines, MP0 32-bit indices are read properly, but limit the database size to 2 or 4 Gb; MP1 64-bit indices allow very large databases. Blast2.0 formatdb databases are still limited to 4Gb. To compile map_db.c to generate 64-bit index files, include the compile time option -DBIG_LIB64 in the Makefile. (Currently this option has been tested only on the DEC Alpha and SGI platforms, and will work only with Unix versions that provide 64-bit longs and 64-bit ftell()'s.) The -R results file now uses sfn_cmp() to report a matching superfamily number, if one exists, and '0' otherwise. >>March 12, 2000 (no version change, previous version not distributed) Provide new strategy for specifying library abbreviations. In addition to: fasta33 query.aa %anr one can also specify: fasta33 query.aa %pir1+sp+nr or fasta33 query.aa +pir1+sp+nr or fasta33 query.aa %+pir1+sp+nr where the + anywhere in the library name string indicates that variable length library names, separated by '+', are being used (the last '+' is optional). The FASTLIBS file then becomes: ================ PIR1 Annotated Protein Database (rel 56)$0+pir1+/slib2/blast/pir1.lseg NBRF Protein database (complete)$0+nbrf+@/seqlib/lib/NBRF.nam NRL_3d structure database$0D/seqlib/lib/nrl_3d.seq 5 NCBI/Blast non-redundant proteins$0+nr+/slib2/blast/nr.lseg NCBI/Blast Swissprot$0+sp+/slib2/blast/swissprot.lseg ================ The two abbreviation types, single letter and +word+, cannot be intermixed, and at least initially, +word+ specifiers are case-sensitive (single letter abbreviations are not) and will not be available interactively, only on the command line. Removed 'K' estimate for Expectation_n, Expectation_i fits to the distribution of unrelated similarity scores. 'K' cannot be calculated from the data available. 'Lamdba' can be calculated, it is 1.28255/sqrt(mean_var), and is still available. >>March 3, 2000 (no version change) changed Makefile33.common, Makefile.common, to incorporate $(NRAND) rather than "rand48". Provide nrandom.c which uses random(), as replacement for nrand.c, which uses rand48(). >>February 8, 2000 --> v33t05 Fixes to scaleswn.c (proc_hist_ml) to set num_db_entries properly. Scaleswn.c also provides Lambda estimates for -z 1/11 (Expectation_n), and -z 1/14 (Expectation_i) statistical estimates. Modifications to calc_id() to correct bug in counting identities. Modified showalign() to use calc_id() with -m 9, for simpler debugging. Additional modifications to dropfa*.c files to deal properly with 'n's and 'x's. Added new option: -x #, which allows one to override the penalty for a match against 'x' (or 'N') provided by the scoring matrix. This option is particularly useful in fast[x/y] searches, where out of frame low complexity regions can generate high scores. The old function of '-x' - to specify an alternate coordinate system, is now available as '-X # #'. Updated scaleswn.c to provide window shuffle information for -z 12. Updated compacc.c, workacc.c, to fix serious bug in wshuffle() that destroyed aa1[n1]=0. >>January 25, 2000 --> v33t04 A serious bug in all of the fasta related programs has been corrected. The new code in fasta33 which ignores certain residues failed to initialize one of the arrays properly. As a result, in pathological situations, a very strong match could be missed. Corrected minor bug in initsw.c that cause misplaced "ktup" command line argument, which should be ingnored by ssearch, to be read as -d ktup. Improved error message for 0 length query sequence. >>January 17, 2000 --> no external version number change Modified mmgetaa.c, map_db.c, and nmgetaa.c to provide memory mapping of genbank flatfile (format=1) files. This format could be read much more efficiently, however. >>January 12, 2000 --> no external version number change Changed the behavior of the options that set the number of high scores (-b) and alignments (-d) that are displayed. Previously, fasta33 -E 10.0 -d 10 would show 50 best scores, rather than all the scores with E() < 10.0. To get the -E threshold to limit, -E 10.0 -b 10000 -d 10 was required. This is now fixed. Setting "-d 10" does not affect the number of best scores shown. Minor change in mw.h to remove unused defines. fasta3x.me (fasta3x.doc) updated. >>January 6, 2000 --> v33t03 Corrected bug in memory mapped reads of gcg_binary format files that potentially caused the last 63 residues to be read improperly. Changes to comp_thr.c, pthr_subs.c, uthr_subs.c, ibm_pthr_subs.c to ensure that each thread has its own work_info structure. This solves some minor race conditions that sometimes caused some parameters not to be reported properly. Changes to most of the drop*.c files to correct some minor problems with sequence alphabets. Code in mmgetaa.c (memory mapped code for FASTA, GCG compressed files) reordered to prevent files from being memory mapped if appropriate index files are not available. See readme.pvm_3.3 for updates to the pvm programs. >>December 10, 1999 (no version change - modifications largely affect ps3comp*) Modifications to showsum.c to deal with 2 scores/sequence. Modifications to mmgetaa.c for superfamily numbers. >>December 7, 1999 (no version change, previous version not released) Corrected problem in mmgetaa.c that caused searches on a memory mapped single long sequence (e.g. Chr22) to fail. Corrected bug in map_db.c that caused it to crash on some architectures if a filename was not specified. Corrected off-by-three error in fasty/tfasty. Corrected indexing error in dropfz2.c. >>December 5, 1999 --> v33t02 corrected some bugs in inifa.c/initsw.c/doinit.c that caused abbreviated function names to be lost. modify showbest.c, showalign.c to include information on position in library sequence (bbp->cont) to distinguish subsegment of very long sequences. Currently, the new label is available only with -m 6. >>November 29, 1999 [t]fastz33 uses v33t02 of fasty function. Replace dropfz.c with dropfz2.c. Dropfz2.c interprets any codons, that include the nucleotide 'N' as the amino 'X'. Previously, 'N' was treated as 'A', so 'NNN' ended up 'K'. This modification, together with the -S option and lower-case pseg'ed databases, should ensure that DNA queries with large numbers of 'N's do not match low complexity regions. >>November 20, 1999 (no version change, previous version not released) Modify initfa.c to disply initn, init1 scores for [t]fast[fs]. Include "-B" option to show previous z-scores. >>November 17, 1999 (no version change, previous version not released) Modify dropfx.c to use saatran(), rather than aatran(). saatran translates any 'N' containing codon as 'X'. aatran() treats 'N' as an 'A'. Although more steps are required for translation, the program appears to run just as fast. >>November 7, 1999 --> v33t01 Substantial changes to the output format in showbest.c (the list of high scoring sequences) and showalign.c (the alignments). The classic list of best scores: The best scores are: initn init1 opt z-sc E(82014) gi|121716|sp|P10649|GTM1_MOUSE GLUTATHIO ( 218) 1497 1497 1497 1761.1 2.3e-91 gi|121717|sp|P04905|GTM1_RAT GLUTATHIONE ( 218) 1413 1413 1413 1662.9 6.7e-86 has been replaced by: The best scores are: opt bits E(82138) gi|121716|sp|P10649|GTM1_MOUSE GLUTATHIONE S-TRAN ( 218) 1497 354 7.6e-98 gi|121717|sp|P04905|GTM1_RAT GLUTATHIONE S-TRANSF ( 218) 1413 335 5.3e-92 This display provides more information and removes the outdated initn and init1 scores, which are no longer used. The "bit" score is comparable to the blast2 bit score. It is calculated as: (lambda*S - ln K)/ln 2, where S is the raw similarity score, lambda and K are statistical parameters estimated from the distribution of unrelated sequence similarity scores. All of the similarity scores, including init1, initn, and z-scores are reported with the alignment data. Z-scores are displayed instead of bit scores in the list of high scores if the command line option "-B" is specified. In addition, the alignment score line has changed from: >>gi|2506495|sp|P20136|GTM2_CHICK GLUTATHIONE S-TRANSFER (220 aa) initn: 954 init1: 954 opt: 958 Z-score: 1130.9 expect() 1.1e-56 Smith-Waterman score: 958; 61.927% identity in 218 aa overlap (1-218:1-218) to: >>gi|2506495|sp|P20136|GTM2_CHICK GLUTATHIONE S-TRANSFER (220 aa) initn: 954 init1: 954 opt: 958 Z-score: 1130.9 bits: 216.4 E(): 2.8e-56 Smith-Waterman score: 958; 61.927% identity in 218 aa overlap (1-218:1-218) In addition to the addition of the "bits:" score, the "expect()" label has changed to "E()" to save some space. >>November 4,12, 1999 (no version change) Fixed serious bug in -z 2 lambda/K calculation in scaleswn.c Fixed bugs in llgetaa.c (openlib()) and definition of superfamily numbers. >>October 21, 1999 (no version change) Begin using CVS for version control. Correct faulty error message in dropfs.c. Corrected bad "goto loopl;" in dropfz.c. Corrected prss3.rsp for Makefile.tc (Win32 version). >>October 18, 1999 --> v33t0 Corrected some serious bugs with the various fasta/x/y programs when the -DALLOCN0 was used to save memory. Improvements to fasta3x.me/.doc documentation. >>October 12, 1999 --> v33tx For this initial release of version 33 of the FASTA programs, the Makefile's have been modified to make "fasta33(_t)", "fastx33(_t)", etc, so that you can test fasta33 while retaining fasta3 (from release v32t08). The FASTA33 programs are somewhat slower than previous releases, but I believe the ability to handle low complexity regions without 'X'ing them out outweighs the slowdown. By (temporarily) changing the names of the programs slightly, it will be easier for you to judge the relative cost and benefit. To "make" the programs as "fasta3(_t)", etc, simply replace "Makefile33.common" with "Makefile.common" in the "Makefile" that you use. >>September 30, 1999 ssearch3/fasta3/fastx3/fasty3 have been modified to search databases containing both upper and lower case letters, where lower case letters indicate low-complexity regions. With the modified programs, lower case letters are treated as 'X's' in the initial scan, but are then treated normally in the final alignment. In addition, alignments can contain lower case letters. Lower case letters are treated as low-complexity regions during the seach phase of the program, but as "conventional" residues during the alignment phase, with the "-S" option. Currently, lower case letters are mapped to 'X's during the scan of the entire library. In the future, alternate weights will be available. This is a substantial improvement for very large scale comparison, where one seeks both accurate statistical estimates and accurate %identities and alignments, and for translated DNA:protein comparisons, like "fastx3" and "fasty3", where out-of-frame translations tend to match low complexity regions (see Pearson et al. (1997) Genomics 46:24-36). Protein databases (and query sequences) can be generated in the appropriate format using John Wooton's "pseg" program, available from ftp://ftp.ncbi.nih.gov/pub/seg/pseg. Once you have compiled the "pseg" program, use the command: pseg database.fasta -z 1 -q > database.lc_seg Once you have database.lc_seg, run the command "map_db" to generate a ".xin" file that can be used to efficiently memory map the database. You can then search database.lc_seg with or without the "-S" option. Without "-S", the database is treated as any other FASTA format file - all the residues are present. With "-S", lower case residues will be treated as 'x's' during the initial scan but as normal residues when final alignments are displayed. When the -S option is used, the matrix information line is changed from: "BL50 matrix (15:-5)" to "BL50 matrix (15:-5)xS". The "-S" option is no longer available to provide a scoring matrix offset. Unfortunately, Blast2.0 format files cannot contain lower case letters. We have addressed this problem by providing efficient memory mapped access to Fasta and GCG/PIR, and GCG/compressed-binary files in the last release of fasta32t08. The memory mapped file I/O improvements are provided in fasta33 as well. ================ readme.v32 ================ FASTX/Y and FASTA (DNA) are now half as fast, because the programs now search both the forward and reverse strands by default. The documentation in fasta3x.me/fasta3x.doc has been substantially revised. >>October 20, 1999 (no version change) Modify nxgetaa.c/nmgetaa.c to recognize 'N' as a possible DNA character. >>October 9, 1999 --> v32t08 (no version number change) Added "-M low-high" option, where low and high are inclusion limits for library sequences. If a library sequence is shorter than "low" or longer than "high", it will not be considered in the search. Thus, "-M 200-250" limits the database search to proteins between 200 and 250 residues in length. This should be particularly useful for fasts3 and fastf3. -M -500 searches library sequences < 500; -M 200 - searches sequences > 200. This limit applies only to protein sequences. Modified scaleswn.c to fall back to maximum likelihood estimates of lambda, K rather than mean/variance estimates. (This allows MLE estimation to be used instead of proc_hist_n when a limited range of scores is examined.) >>October 2, 1999 --> v32t08 Many changes: (1) memory mapped (mmap()ed) database reading - other database reading fixes (2) BLAST2 databases supported (3) true maximum likelihood estimates for Lambda, K (4) Misc. minor fixes (1) (Sept. 26 - Oct. 2, 1999) Memory mapped database access. It is now possible to use mmap()ed access to FASTA format databases, if the "map_db" program has been used to produce an ".xin" file. If USE_MMAP is defined at compile time and a ".xin" file is present, the ".xin" will be used to access sequences directly after the file is mmap()ed. On my 4-processor Alpha, this can reduce elapsed time by 50%. It is not quite as efficient as BLAST2 format, but it is close. Currently, memory mapping is supported for type 0 (FASTA), 5 (PIR/GCG ascii), and 6 (GCG binary). Memory mapping is used if a ".xin" file is present. ".xin" files are created by the new program "map_db". The syntax for "map_db" is: map_db [-n] "/dir/database.fa" which creates the file /dir/database.fa.xin. Library types can be included in the filename; thus: map_db -n "/gcggenbank/gb_om.seq 6" would be used for a type 6 GCG binary file. The ".xin" file must be updated each time the database file changes. map_db writes the size of the database file into the ".xin" file, so that if the database file changes, making the ".xin" offset information invalid, the ".xin" file is not used. "list_db" is provided to print out the offset information in the ".xin" file. (Oct 2, 1999) The memory mapping routines have been changed to allow several files to be memory mapped simultaneously. Indeed, once a database has been memory mapped, it will not be unmap()ed until the program finishes. This fixes a problem under Digital Unix, and should make re-access to mmap()ed files (as when displaying high scores and alignments) much more efficient. If no more memory is available for mmap()ing, the file will be read using conventional fread/fgets. (Oct 2, 1999) The names of the database reading functions has been changed to allow both Blast1.4 and Blast2.0 databases to be read. In addition, Makefile.common now includes an option to link both ncbl_lib.o and ncbl2_lib.o, which provides support for both libraries. However, Blast1.4 support has not been tested. The Makefile structure has been improved. Each architecture specific Makefile (Makefile.alpha, Makefile.linux, etc) now includes Makefile.common. Thus, changes to the program structure should be correct for all platforms. "map_db" and "list_db" are not made with "make all". The database reading functions in nxgetaa.c can now return a database length of 0, which indicates that no residues were read. Previously, 0-length sequences returned a length of 1, which were ignored. Complib.c and comp_thr.c have changed to accommodate this modification. This change was made to ensure that each residue, including the last, of each sequence is read. Corrected bug in nxgetaa.c with FASTA format files with very long (>512 char) definition lines. (2) (September 20, 1999) BLAST2 format databases supported This release supports NCBI Blast2.0 format databases, using either conventional file reading or memory mapped files. The Blast2.0 format can be read very efficiently, so there is only a modest improvement in performance with memory mapping. The decision to use mmap()'ed files is made at compile time, by defining USE_MMAP. My thanks to Eamonn O'Toole of DEC/Compaq, and Daryl Madura of Sun Microsystems, for providing mmap()'ed modifications to fasta3. On my machines, Blast2.0 format reduces search time by about 30%. At the moment, ambiguous DNA sequences are not decoded properly. (3) (September 30, 1999) A new statistical estimation option is available. -z 2 has been changed from ln()-scaling, which never should have been used, to scaling using Maximum Likelihood Estimates (MLEs) of Lambda and K. The MLE estimation routines were written by Aaron Mackey, based on a discussion of MLE estimates of Lambda and K written by Sean Eddy. The MLE estimation examines the middle 95% of scores, if there are fewer than 10000 sequences in the database; otherwise it excludes (censors) the top 250 scores and the bottom 250 scores. This approach seems to effectively prevent related sequences from contaminating the estimation process. As with -z 1, -z 12 causes the program to generate a shuffled sequence score for each of the library sequences; in this case, no censoring is done. If the estimation process is reliable, Lambda and K should not vary much with different queries or query lengths. Lambda appears not to vary much with the comparison algorithm, although K does. (4) Minor changes include fixes to some of the alignment display routines, individual copies of the pstruct structure for each thread, and some changes to ensure that every last residue in a library is available for matching (sometime the last residue could be ignored). This version has undergone extensive testing with high-throughput sequences to confirm that long sequences are read properly. Problems with fastf3/fasts3 alignment display have also been addressed. >>August 26, 1999 (no version change - not released) Corrected problem in "apam.c" that prevented scoring matrices from being imported for [t]fasts3/[t]fastf3. >>August 17, 1999 --> v32t07 Corrected problem with opt_cut initialization that only appeared with pvcomp* programs. Improved calculation of FASTA optcut threshold for DNA sequence comparison for match scores much less than +5 (e.g. +3). The previous optcut theshold was too high when the match penalty was < 4 and ktup=6; it is now scaled more appropriately. Optcut thresholds have also been raised slightly for fastx/y3/tfastx/y3. This should improve performance with minimal effects on sensitivity. >>July 29, 1999 (no version change - date change) Corrected various uninitialized variables and buffer overruns detected. >>July 26, 1999 - new distribution (no version change - v32t06, previous version not released) Changed the location of "(reverse complement)" label in tfasta/x/y/s/f programs. Statistical calculations for tfasta/x/y in unthreaded version corrected. Statistical estimates for threaded and unthreaded versions of the tfasta/x/y/s/f programs should be much more consistent. Substantial modifications in alignment coordinate calculation/ presentation. Minor error in fastx/y/tfastx/y end of alignment corrected. Major problems with tfasta alignment coordinates corrected. tfasta and tfastx/y coordinates should now be consistent. Corrected problem with -N 5000 in tfasta/x/y3(_t) searches encountered with long query sequences. Updated pthr_subs.c/Makefile.linux to increase the pthreads stacksize to try to avoid "cannot allocate diagonal arrays" error message. Pthreads stacksize can be changed with RedHat 6.0, but not RedHat 5.2, so Makefile.linux uses -DLINUX5 for RedHat5.* (no pthreads stack size). I am still getting this message, so it has not been completely successful. Makefile.linux now uses -DALLOCN0 to avoid this problem, at some cost in speed. The pvcomp* programs have been updated to work properly with forward/reverse DNA searches. See readme.pvm_3.2. >>July 7, 1999 - not released --> v32t06 Corrected bug in complib.c (fasta3, fastx3, etc) that caused core dumps with "-o" option. Corrected a subtle bug in fastx/y/tfastx/y alignment display. >>June 30, 1999 - new distribution (no version change) Corrected doinit.c to allow DNA substitution matrices with -s matrix option. Changed ".gbl" files to ".h" files. >>June 2 - 9, 1999 - new distribution (no version change) Added additional DNA lambda/K/H to alt_param.h. Corrected some other problems with those table. for the case where (inf,inf) gap penalties were not included. Fixed complib.c/comp_thr.c error message to properly report filename when library file is not found. Included approximate Lambda/K/H for BL80 in alt_parms.h. BL80 scoring matrix changed from 1/3 bit to 1/2 bit units. Included some additional perl files for searchfa.cgi, searchnn.cgi in the distribution (my-cgi.pl, cgi-lib.pl). >>May 30, 1999, June 2, 1999 - new distribution (no version number change) Added Makefile.NetBSD, if !defined(__NetBSD__) for values.h. Changed zs_to_E() and z_to_E() in scaleswn.c to correctly calculate E() value when only one sequence is compared and -z 3 is used. >>May 27, 1999 (no version number change) Corrected bug in alignment numbering on the % identity line 27.4% identity in 234 aa (101-234:110-243) for reverse complements with offset coordinates (test.aa:101-250) >>May 23, 1999 (no version number change) Correction to Makefile.linux (tgetaa.o : failed to -DTFAST). >>May 19, 1999 (no version number change) Minor changes to pvm_showalign.c to allow #define FIRSTNODE 1. Changes to showsum.c to change off-end reporting. (Neither of these changes is likely to affect anyone outside my research group.) >>May 12, 1999 --> v32t05 Fixed a serious bug in the fastx3/tfastx3 alignment display which caused t/fastx3 to produce incorrect alignments (and incorrectly low percent identities). The scores were correct, but the alignment percent identities were too low and the alignments were wrong. Numbering errors were also corrected in fastx3/tfastx3 and fasty3/tfasty3 and when partial query sequences were used. >>May 7, 1999 Fixed a subtle bug in dropgsw.c that caused do_work() to calculate incorrect Smith-Waterman scores after do_walign() had been called. This affected only pvcompsw searches with the "-m 9" option. >>May 5, 1999 Modified showalign.c to provide improved alignment information that includes explicitly the boundaries of the alignment. Default alignments now say: Smith-Waterman score: 175; 24.645% identity in 211 aa overlap (5:207-7:207) >>May 3, 1999 Modified nxgetaa.c, showsum.c, showbest.c, manshowun.c to allow a "not" superfamily annotation for the query sequence only. The goal is to be able to specify that certain superfamily numbers be ignored in some of the search summaries. Thus, a description line of the form: >GT8.7 | 40001 ! 90043 | transl. of pa875.con, 19 to 675 says that GT8.7 belongs to superfamily 40001, but any library sequences with superfamily number 90043 should be ignored in any listing or summary of best scores. In addition, it is now possible to make a fasta3r/prcompfa, which is the converse of fasta3u/pucompfa. fasta3u reports the highest scoring unrelated sequences in a search using the superfamily annotation. fasta3r shows only the scores of related sequences. This might be used in combination with the -F e_val option to show the scores obtained by the most distantly related members of a family. >>April 25, 1999 -->v32t04 (not distributed) Modified nxgetaa.c to remove the dependence of tgetaa.o on TFASTA (necessary for a more rational Makefile structure). No code changes. >>April 19, 1999 Fixed a bug in showalign.c that displayed incorrect alignment coordinates. (no version number change). >>April 17, 1999 --> v32t03 A serious bug in DNA alignments when the sequence has been broken into multiple segments that was introduced in version fasta32 has been fixed. In addition, several minor problems with -z 3 statistics on DNA sequences were fixed. Added -m 9 option, which unfortunately does different things in pvcompfa/sw and fasta3/ssearch3. In both programs, -m 9 provides the id's of the two sequences, length, E(), %_ident, and start and end of the alignment in both sequences. pvcompfa/sw provides this information with the list of high scoring sequences. fasta3/ssearch3 provides the information in lieu of an alignment. >>March 18, 1999 --> v32t02 Added information on the algorithm/parameter description line to report the range of the pam matrices. Useful for matrices like MD_10, _20, and _40 which require much higher gap penalties. >>March 13, 1999 (not distributed) --> v32t01 -r results.file has been changed to -R results.file to accomodate DNA match/mismatch penalties of the form: -r "+1/-3". >>February 10, 1999 Modify functions in scalesw*.c to prevent underflow after exp() on Alpha Linux machines. The Alpha/LINUX gcc compiler is buggy and doesn't behave properly with "denormalized" numbers, so "gcc -g -m ieee" is recommended. Add "Display alignments also (y/n)[n] " pvcomplib.c again provides alignments!! In addition, there is a new "-m 9" option, which reports alignments as: >>>/home/wrp/slib/hlibs/hum0.aa#5>HS5 gi:1280326 T-cell receptor beta chain 30 aa, 30 aa vs /home/wrp/slib/hlibs/hum0.seg library HS5 30 HS5 30 1.873e-11 1.000 30 1 30 1 30 HS5 30 HS2249 40 1.061e-07 0.774 31 1 30 7 37 HS5 30 HS2221 38 1.207e-07 0.833 30 1 30 7 35 HS5 30 HS2283 40 1.455e-07 0.774 31 1 30 7 37 HS5 30 HS2239 38 1.939e-07 0.800 30 1 30 7 35 where the columns are: query-name q-len lib-name lib-len E() %id align-len q-start q-end l-start l-end >>February 9, 1999 Corrected bug in showalign.c that offset reverse complement alignments by one. >>Febrary 2, 1999 Changed the formatting slightly in showbest.c to have columns line up better. >>January 11, 1999 Corrected some bugs introduced into fastf3(_t) in the previous version. >>December 28, 1998 Corrected various problems in dropfz.c affecting alignment scores and coordinates. Introduced a new program, fasts3(_t), for searching with peptide sequences. >>November 11, 1998 --> v32t0 Added code to correct problems with coordinate number in long library sequences with tfastx/tfasty. With this release, sequences should be numbered properly, and sequence numbers count down with reverse complement library sequences. In addition, with this release, fastx/y and tfastx/y translated protein alignments are numbered as nucleotides (increasing by 3, labels every 30 nucleotides) rather than codons. fasta36-36.3.8i_14-Nov-2020/doc/readme.v34t0000066400000000000000000002001771433453312700175000ustar00rootroot00000000000000 $Id: readme.v34t0 348 2010-07-20 21:33:22Z wrp $ $Revision: $ >>May 28, 2007 Small modification for GCG ASCII (libtype=5) header line. >>January 12, 2007 fasta-34_26_2 Fix a problem with pssm_asn_subs.c reading strings (sequences) longer than 1024 bytes. Remove searchfa.cgi, searchnn.cgi, cgi-lib.pl, my-cgi.pl - this code was used for an ancient FASTA WWW implementation and has been replaced by the FASTA_WWW package. FASTA Version numbers are being modified to make releases easier to track, thus fa34t26b5 has become fasta-34_26_1. I would prefer to use decimal versions, but CVS does not allow '.' in tags. >>January 4, 2007 fasta-34_26_1 Include scripts for building Mac OS X Universal binaries on a PPC machine. Programs are compiled first with Makefile.os_x (gcc-3.3 for PPC) and then installed into ./ppc/. Programs are next compiled with Makefile.os_x86 for i386, and the resulting executables installed into ./i386/. Finally, the "make_osx_univ.sh" script is run to build the universal binaries from the two executables using "lipo". >>December 12, 2006 Fix some problems with p2_workcomp.c: (1) no longer initialize pad characters for non-existant sequences. (2) deal with small libraries consistently with the serial versions. >>November 17, 2006 fa34t26b5 Fixed a problem reading ASN.1 format 2 PSSM's. It is now possible to download a PSI-BLAST PSSM RID and search properly. Next, the query sequence from the PSSM should be used instead of the provided query sequence, so that the query sequence is ignored. >>October 19, 2006 fa34t26b4 Fixed problem with SSE2 code when PSSM's are used. >>October 6, 2006 fa34t26b3 A new set of WIN32 programs is now available that use the Intel C++ 9.1 compiler, rather than the much older Borland Turbo-C compiler. All of the unthreaded programs that are part of the Unix and MacOSX FASTA distributions are now available. Threaded (multiprocessor) versions of the program as available as well, as are sse2 accelerated versions of ssearch34 (ssearch34sse2.exe, ssearch34sse2_t.exe). Th new WIN32 code also uses Microsoft's "nmake" program to build the programs, which allows much greater consistency between the Unix and Windows versions. >>September 18, 2006 Static global alignment variables removed from dropnfa.c, dropfx.c, dropfz2.c. dropnfa.c, dropfx.c and dropfz2.c should be thread safe. Together with the earlier changes, all the FASTA functions should now be thread safe during the alignment process. >>August 17, 2006 Begin removal of static variables from Smith-Waterman alignment functions. These variables kept the functions from being thread-safe. Now dropgsw.c and dropnsw.c are thread-safe. >>August 15, 2006 fa34t26b2 Fixed a problem with pv34compfx/mp34compfx (and fy) producing improperly labeled alignments and de-allocating memory for the reverse complement. >>July 18, 2006 The library file name parsing programs now provide the option for environment variable substitions. For example, SLIB2=/slib2 as an environment variable (e.g. export SLIB2=/slib2 for ksh and bash), then fasta34 -q query.aa '${SLIB2}/swissprot.fa' expands as expected. While this is not important for command lines, where the Unix shell would expand things anyway, it is very helpful for various configuration files, such as files of file names, where: <${SLIB2}/blast swissprot.fa now expands properly, and in FASTLIBS files the line: NCBI/Blast Swissprot$0S${SLIB2}/blast/swissprot.fa expands properly. Currently, Environment variable expansion only takes place for library file names, and the >July 14, 2006 fa34t26b1 Updated Farrar smith_waterman_sse2.c code to address possible bug (code from Michael Farrar). Include for compilation with Sun compiler with Makefile.sun_x86. >>July 2, 2006 fa34t26b0 This release provides an extremely efficient SSE2 implementation of the Smith-Waterman algorithm for the SSE2 vector instructions written by Michael Farrar. The SSE code speeds up Smith-Waterman 8 - 10-fold in my tests, making it comparable to Eric Lindahl's Altivec code for the Apple/IBM G4/G5 architecture. The Farrar code is largely confined to smith_waterman_sse2.c and smith_waterman_sse2.h, which are copyright (2006) by Michael Farrar, and cannot be redistributed without his permission. Mr. Farrar has agreed to provide his code under the same policy used by FASTA - e.g. the code can be used without permission, but not redistributed. The Farrar code uses GCC version 4.0 SSE2 intrinsic functions to avoid assembly language code. Unfortunately, in my hands, "gcc -O3" causes "out of memory" errors, and other problems, so "gcc -O" is used instead. >>June 23, 2006 fa34t25d10 Modifications to comp_lib.c, compacc.c, and other files to ensure that function-specific MAXTOT values are used properly. MAXTOT is now available as m_msg.max_tot, which is set in initfa.c (m_msg.max_tot = MAXTOT) to ensure that functions that need very large MAXTOT values (e.g. TFASTX) can get them. tfastx can now search successfully with titin, a 27,000 residue protein. Other changes have been made to accomodate long query sequences. A serious bug was found in fastx34(_t) that caused alignment coordinates to be calculated improperly when the DNA sequence was much longer than the protein sequence. >>May 31, 2006 fa34t25d9 Fixed some problems with fasts/fastf alignments when -m 9 options were used. Unlike the other algorithms, the a_res structure does not capture all the information to re-produce an alignment, so do_walign now sets bptr->have_ares to indicate whether the a_res structure is valid. Various problems with bad library names, and short query titles were also fixed. Updated version number/date on all drop*.c functions. >>May 24, 2006 fa34t25d8 Revised code for NCBI *.pal/*.nal databases has been tested on all architectures, including Windows. In addition, support for ASN.1 PSSM:2 files provided by the NCBI PSI-BLAST WWW site is included. This code will not work with iteration 0 PSSM's (which have no PSSM information). For ASN.1 PSSM's, which provide the matrix name (and in some cases the gap penalties), the scoring matrix and gap penalties are set appropriately if they were not specified on the command line. ASN.1 PSSM's are type 2: ssearch34 -P "pssm.asn1 2" ..... >>May 18, 2006 Support for NCBI Blast formatdb databases has been expanded. The FASTA programs can now read some NCBI *.pal and *.nal files, which are used to specify subsets of databases. Specifically, the swissprot.00.pal and pdbaa.00.pal files are supported. FASTA supports files that refer to *.msk files (i.e. swissprot.00.pal refers to swissprot.00.msk); it does not currently support .pal files that simply list other .pal or database files (e.g. FASTA does not support nr.pal or swissprot.pal). In the process of providing this support, the routines used to read ASN.1 binary formatdb files were substantially improved. It is now possible to see multiple description lines for a single sequence. IS_BIG_ENDIAN has been removed from all of the Makefiles. The code now looks for the definition of __BIG_ENDIAN__ or _BIG_ENDIAN to decide whether the architecture IS_BIG_ENDIAN. If, for some reason, one of these macros is not defined on a BIG_ENDIAN architecture, then -DIS_BIG_ENDIAN is required. >>May 12, 2006 CVS fa34t25d7 Corrected serious problem with coordinate display calculation for fasta34 and ssearch34 - in some cases the coordinates and alignment symbols were off by the length of the context (typically 30 residues). Added capability to read ASN.1 binary PSSM information. This information is provided (in an encoded form) from the NCBI PSI-BLAST WWW site. (What is actually provided from the WWW site is a bzip2-ed binary file that is converted to ASCII HEX. The ASCII HEX file must be converted to binary, and then bunzip'ed. This bunzip-ed file is binary ASN.1.) These files can also be generated by blastpgp -J T -C pssm.asn1_bin -u 2 I am parsing the ASN.1 binary manually, not using the NCBI toolkit, so there may be some files that are not parsed properly - if so, let me know. (May 12, 2006 - The NCBI changed the format of the psi-blast ASN.1 PSSM - and has not yet provided documentation of the new structure, so this code does not work. It does work with blastpgp v 2.2.13, but not with the web site version 2.2.14. A fix was provided 24-May-2006) >>April 18, 2006 Small modification in mshowbest.c to provide more consistent display widths with -m 9i in list of best hits. >>April 11, 2006 CVS fa34t25d6 Corrected a problem introduced with the new, more efficient method for displaying alignments. For the tfast* programs, which must translate the library sequence, translations were not done when alignments were re-displayed. Corrected an older problem with tfastx34 against very long sequence databases - the code to more efficiently do the display alignment did not use the correct sequence coordinates. Modifications to dropfs2.c to ensure that exact peptide matches are captured more frequently. >>March 16, 2006 CVS fa34t25d5 Change to initfa.c to allow lower case DNA libraries using the -DDNALIB_LC compile time option. Modify p2_complib.c, p2_worklib.c (and doinit.c, msg.h) to allow the -V annotation option for the parallel programs. Also modify to allow specification of the query range (but only for the first query, like fasta34) for the parallel programs. Modification of p2_workcomp.c to correct some problems presenting percent similarity. Also correct unreleased bugs in the alignment routines that allow more efficient alignment re-calculation. >>Nov 20, 2005 Changes to support asymmetric matrices - a scoring matrix read in from a file can be asymmetric. Default matrices are all symmetric. >>Oct 24, 2005 Modifications extended to p2_complib.c/p2_workcomp.c. Incorporation of drop_func.h into p2_workcomp.c greatly simplifies things. No changes in communication - struct a_res_str is internal to p2_workcomp.c. Additional changes to do_walign() so that aln_func_vals() must be called to set llfact, qlfact, etc in a_struct aln before or after do_walign is called. do_walign produces a_res_str a_res, which has all the information necessary to produce a calcons() or calc_code() alignment. >>Oct 19, 2005 CVS fa34t26b0 Modifications to drop*.c and c_dispn.c to separate (and simplify) some of the alignment coordinate calculations. Before, the "a_struct" had the coordinates of the alignment used in the display (seqc0, seqc1) AND in the original sequences (aa0, aa1), as well as other information used to calculate alignment coordinates. In the new version, astruct coordinates always refer to seqc0,1, while a new structure, a_res_str, has coordinates for aa0, aa1 as well as the alignment encoding in res[nres]. Eventually, this should make it possible to display multiple local alignments from the same two sequences. In addition, the file "drop_func.h" has been added to the project, and is included by many of the files (all the drop*.c functions, mshowbest.c, mshowalign.c) to ensure that the various functions are declared and used consistently. >>Sept 19, 2005 CVS fa34t25d4 Changes to support Mac OS 10.4 - Tiger (include sys/types.h in more files). Documentation update for prss34/prfx34. Modifications to comp_lib.c to support prss34_t/prfx34_t. Shuffle numbers for prss/prfx can now be specified by "-k #". >>Sept 2, 2005 The prss34 program has been modified to use the same display routines as the other search programs. To be more consistent with the other programs, the old "-w shuffle-window-size" is now "-v window-size". prss34/prfx34 will also show the optimal alignment for which the significance is calculated by using the "-A" option. Since the new program reports results exactly like other fasta/ssearch/fastxy34 programs, parsing for statistical significance is considerably different. The old format program can be make using "make prss34o". >>Aug 26, 2005 Modifications to save_best() in comp_lib.c to support prss34_t. It did not work before. >>July 25, 2005 Modify mshowbest.c to suppress gi|12345 in HTML mode. >>July 18, 2005 CVS fa34t25d3 Modifications to Makefile.tc to support NCBI formatdb formats under Windows. >>May 19, 2005 CVS fa34t25d2 Modifications to dropfs2.c to fix an obscure bug that occurred when correctly ordered peptides aligned one residue apart. >>May 5, 2005 CVS fa34t25d1 Modification to the -x option, so that both an "X:X" match score and an "X:not-X" mismatch score can be specified. (This score is also used give a positive score to a "*:*" match - the end of a reading frame, while giving a negative score to "*:not-*". >>March 14, 2005 CVS fa34t25b4 Fixed some problems caused by padding characters required for Smith-Waterman ALTIVEC in the parallel (p2_complib.c, p2_workcomp.c) versions. >>Feb 24, 2005 CVS fa34t25b3 Changes to comp_lib.c (and Makefile.pcom) to support prss34_t. >>Feb 12, 2005 Modify dropfs.c to dynamically allocate space for alignments, so that queries with a large number of fragments can still place all the fragments on the alignment. Also fix a problem produced by removing -DBIGMEM from most of the Makefile's, but not fixing defs.h to use BIGMEM sizes by default. >>Jan 24, 2005 Include a new program, "print_pssm", which reads a blastpgp binary checkpoint file and writes out the frequency values as text. These values can be used with a new option with ssearch34(_t) and prss34, which provides the ability to read a text PSSM file. To specify a text PSSM, use the option -P "query.ckpt 1" where the "1" indicates a text, rather than a binary checkpoint file. "initfa.c" has also been modified to work with PSSM files with zero's in the in the frequency table. Presumably these positions (at the ends) do not provide information. (Jan 26, 2005) blastpgp actually uses BLOSUM62 values when zero frequencies are provided, so read_pssm() has been modified to use scoring matrix values for zero frequencies as well. >>Jan 13, 2005 Change to initfa.c to have fasts34 do a protein comparison by default, rather than an unknown sequence type. Automatic checking for fasts34 does not work reliably, because queries can be very short. Likewise for fastm34. [Jan 26, 2004] Undo this change, which broke DNA comparison when "-n" was specified. >>Jan 7, 2005 Changes to tatstats.h, dropfs2.c to allow larger numbers of peptides to match when fasts is used to show coverage on a proteomics experiment. Previously fasts could match no more than 30 peptides, that has been increased to 50. In addition, ktup=2 can be used to increase the likelihood that short exact matchs trump longer mismatched regions. >>Nov 11, 2004 CVS fa34t25 Finished merge of earlier fa34t24 branch with HEAD. Correct labeling of TFASTM. >>Nov 4-8, 2004 Incorporation of Erik Lindahl "anti-diagonal" Altivec code for Smith-Waterman, only. Altivec SSEARCH is now faster than FASTA for query sequences < 250 amino acids. Small modifications to output score display to ensure that the correct scores are shown, and that they are correctly labeled. >>Aug 25,26, 2004 CVS fa34t24b3 Small change in output format for p34comp* programs in ">>>query_file#1 string" line before alignments. This line is not present in the non-parallel versions - it would be better for them to be consistent. Change in last_stats.c to properly label fasts statistics with -z != 1. Change in dropfs2.c to ensure that tatprobs are not precalculated with -z 4. Modify -m 9i output option to show in HTML output. Add "#ifdef NOOVERHANG" to dropfs2.c that causes overlapping alignments to score a 0, rather than the partial overlap score. Useful for SAGE alignments, because "fasts" requires global alignments (except for for overhangs, unless NOOVERHANG is defined). >>Aug 23, 2004 Fix problem with very long definition lines with formatdb version4 ASN databases. Fix mshowalign.c to re-enable "-L" option. >>July 28, 2004 Fix to re-enable -w window shuffle for PRSS. Modify comp_lib.c for PRSS to ensure that the unshuffled score and probability are shown, even for very high probabililty alignments. >>July 21, 2004 Modifications to support PostgreSQL databases with the same commands as MySQL databases. MySQL database libraries are type 16, PostgreSQL are type 17. Makefile.linux_sql and Makefile.pvm4_sql support both database types simultaneously. >>June 23, 2004 CVS fa34t24b2 Additional fixes to enable -n or -p with fasts34 and fastm34. Makefile.pcom was fixed for fastm34_t. A new file, mgstm1.nts, of DNA fragments from mgstm1.seq, is included for testing fasts34 and fastm34. >>May 4, 2004 Fixes to initfa.c to allow DNA:DNA for FASTS, FASTM. This change introduced a bug that broke FASTS completely, but was fixed June 18, 2004 (and retagged fa34t24b2). >>April 23, 2004 CVS fa34t24b1 Fix bug in initfa.c that caused tfasts/tfastf not to examine all six frames. >>May 4, 2004 Fixes to initfa.c to allow DNA:DNA for FASTS, FASTM. >>March 19, 2004 CVS fa34t24b0 Modify all the drop*.c files, plus mshowbest.c and mshowalign.c, to display percent similarity, rather than percent ungapped. An alignment is counted as similar if the score is greater than or equal to zero (the same criterion used for placing ".". To disable this change, remove -DSHOWSIM from the appropriate Makefile.*. >>March 18, 2004 CVS fa34t23b8 Fix bug in initfa.c tables that caused prss to generally compare proteins. >>March 15, 2004 Fix bug in calls to revcomp(); make revcomp() guarantee NULL termination. >>March 2, 2004 CVS fa34t23b7 Fix a very embarrassing and surprising bug that caused insertions in fasta alignments to appear in the wrong sequence. >>Feb 7, 2004 CVS fa34t23b6 Change initfa.c to allow "-i" (reverse complement) and "-i -3" with "fastx34" and "prfx34". In addition, "prfx34" now examines both query DNA strands in calculated the shuffled statistical significance. >>Feb 5, 2004 Reverse assignments for G:U baseparing in initfa.c. Fix memory allocation error caused by doubling DNA alignment width. >>Jan 7, 2004 CVS fa34t23b5 Change in do_walign() in dropnfa.c to make final DNA alignments use a band that is 2X as large as the search band width. >>Dec 22, 2003 CVS fa34t23b4 Fix typo in p2_complib.c that prevented compilation. Fix problem with karlin.c for asymmetrical matrices, such as used with -U. >>Dec 10, 2003 CVS fa34t23b3 Fix problem in resetp()/initfa.c that disabled banded Smith-Waterman DNA alignments. Allow spam() to do extended alignments for DNA if one of the sequences is < 50 nt. Cause default ktup to drop for short sequences. For protein < 50, ktup=1; for DNA < 20, 50, 100 ktup = 1, 2, 3, respectively. >>Dec 7, 2003 A new option, "-U" is available for RNA sequence comparison. "-U" functions like "-n", indicating that the query is an RNA sequence. In addition, to account for "G:U" base pairs, "-U" modifies the scoring matrices so that a "G:A" match has the same score as "G:G" match, and "T:C" match has the same score as a "T:T" match. (Corrected 13-July-2010 -- the G:A/T:C scores are score(G:G)-3.) The asymmetric matrix required changes in dropnfa.c that were similar to the changes in dropgsw.c required for profiles. In addition, m_msg.qdnaseq and pst.dnaseq can now be SEQT_DNA, SEQT_RNA, SEQT_PROT, SEQT_UNK, or SEQT_OTHER. m_msg.ldnaseq does not use SEQT_RNA, only SEQT_DNA. A new member of struct pstruct: int nt_align, is used to indicate nucleotide alignments. >>Nov 19, 2003 Changes to Makefile's to distinguish between tatstats_fs.o and tatstats_ff.o. >>Nov 2, 2003 Substantial changes to comp_lib.c, p2_complib.c, mshowbest.c, and mshowalign.c to support more sophisticated display options. Previously, one could have only on "-m #" option, even though several of the options were orthogonal (-m 9c is independent of -m 1 and -m2, which is independent of -m 6 (HTML)). The programs now use a bitmask that allows independent options to be combined. In particular -m 9c can be combined with -m 6, which can be very helpful for runs that need HTML output but can also exploit the encoding provided by -m 9c. The "-m 9" option now also allows "-m 9i", which shows the standard best score information, plus percent identity and alignment length. >>Oct 26, 2003 CVS fa34t23b1 Additional fixes to Makefiles to enable tfastf34(_t). Changes to support ossearch34 (a non-Phil Green optimized Smith-Waterman). >>Oct 8, 2003 CVS fa34t23b0 Fixes to get DNA queries working in both directions, and to fix PCOMPLIB programs for "-V" option. Currently, the parallel programs cannot use the "-V" option. >>Sept 25, 2003 A new option is available for annotating alignments. -V '@#?!' can be used to annotate sites in a sequence, e.g: >GTM1_HUMAN ... PMILGYWDIRGLAHAIRLLLEYTDS@S?YEEKKYT@MG DAPDYDRS@QWLNEKFKLGLDFPNLPYLIDGAHKIT might mark known and expected (S,T) phosphorylation sites. These symbols are then displayed on the query coordinate line: 10 20 @? 30 @ 40 @ 50 60 GTM1_H PMILGYWDIRGLAHAIRLLLEYTDSSYEEKKYTMGDAPDYDRSQWLNEKFKLGLDFPNLP :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: gtm1_h PMILGYWDIRGLAHAIRLLLEYTDSSYEEKKYTMGDAPDYDRSQWLNEKFKLGLDFPNLP 10 20 30 40 50 60 This annotation is mostly designed to display post-translational modifications detected by MassSpec with FASTS, but is also available with FASTA and SSEARCH. >>Sept 22, 2003 CVS fa34t22b5 The Altivec Smith-Waterman code has been removed. >>Sept 17, 2003 CVS fa34t22b4 A variety of different bugs have been fixed. (1) All the functions in the old initsw.c are now in initfa.c; initsw.c will be removed. Specifically, the Profile/PSSM code is now in initfa.c. initfa.c is now fully table driven. (2) various problems with prss34 and prfx34 have been fixed in initfa.c. (3) An additional ncbl2_mlib.c buffer overrun has been fixed. (4) fastf34 is now available in this package. Its performance is very similar to, but not identical to, fastf33. I am tracking down the differences. In general, the raw scores calculated by both programs are the same, but the statistical analysis seems to be slightly different. >>July 30, 2003 CVS fa34t22b3 Fix bug in ncbl2_mlib.c that caused buffer overrun with blast/formatdb v3 description lines. >>July 28, 2003 The initfa.c file has been substantially re-structured to use a table-driven approach to parameter setting, rather than the previous confusing combinations of #ifdef's. Two tables of parameters are used, pgm_def_arr[] and msg_def_arr[], which specify values like the program name, reference, scoring matrix, default gap penalties, etc. msg_def_arr[] has the sequence types for the query, library, and algorithm, as well as other parameters (qframe, nframe, nrelv, etc), which greatly simplifies the sequence recognition logic. ppst->pgm_id can be used to identify the program that is running. Eventually, almost all of the program specific #ifdef's will be removed from initfa.c. initfa.c now provides initsw.c functionality, so that initsw.c is no longer needed. >>July 25, 2003 A new file is included - fasta.defaults - that lists the scoring matrix, gap penalty, and other defaults for all of the fasta34 programs. This file will be used soon to simplify parameter setting for the FASTA programs, and should also be used by Javascript WWW interfaces to the FASTA programs. >>July 22, 2003 CVS fa34t22b2 Fixes to dropfs2.c, tatprobs.c to ensure that negative probabilities cannot occur. Negative probabilities were never seen with standard matrices, but did occur with BL50. Another optimization in dropfs.c considerably improves fasts34 performance in some cases. Fix a problem with formatdb v4 ASN.1 format files. >>July 12, 2003 Fix a bug that prevented "-L" (long sequence descriptions) from working. >>July 9, 2003 Fix reverse complement (M:K) error. Fix off-by-one error for FASTA DNA alignments that caused the first aligned residue pair to be missed. >>July 4 - 8, 2003 Incorporate blast-def-line ASN.1 parsing so that NCBI formatdb version 4 files can be read. >>June 26, 2003 The strategy for displaying the match/mismatch line (" .:" for -m 0) has been changed dramatically to acommodate more sophisticated strategies for indicating conservative replacements, e.g. because of PSSM's. In addition to seqc0 and seqc1, which hold the aligned sequences for display, there is also seqca, which holds the alignment symbol. calcons(), do_show(), and discons() have all changed to include seqca. calcons() is somewhat more complex; discons() is much simpler. (June 29, 2003 - dropgsw.c calcons() now displays profile similarity accurately - it is very very illuminating.) >>June 16, 2003 version: fasta34t22 ssearch34 now supports PSI-BLAST PSSM/profiles. Currently, it only supports the "checkpoint" file produced by blastall, and only on certain architectures where byte-reordering is unnecessary. It has not been tested extensively with the -S option. ssearch34 -P blast.ckpt -f -11 -g -1 -s BL62 query.aa library Will use the frequency information in the blast.chkpt file to do a position specific scoring matrix (PSSM) search using the Smith-Waterman algorithm. Because ssearch34 calculates scores for each of the sequences in the database, we anticipate that PSSM ssearch34 statistics will be more reliable than PSI-Blast statistics. The Blast checkpoint file is mostly double precision frequency numbers, which are represented in a machine specific way. Thus, you must generate the checkpoint file on the same machine that you run ssearch34 or prss34 -P query.ckpt. To generate a checkpoint file, run: blastpgp -j 2 -h 1e-6 -i query.fa -d swissprot -C query.ckpt -o /dev/null (This searches swissprot for 2 iterations ("-j 2" using a E() threshold 1e-6 saving the resulting position specific frequencies in query.ckpt. Note that the original query.fa and query.ckpt must match.) >>June 5, 2003 Fix to mshowbest.c to get -m 9 coordinates correct on reverse strand with pv34comp*. Some additional fixes for prfx34. >>May 22, 2003 Changes to llgetaa.c, getseq.c, comp_lib.c to provide a different library residue lookup table (sascii) for queries and libraries. This allows one to make a prfx34 (like prss34, but using the fastx algorithm). prfx34 is now available. >>May 13,14 2003 Fixes to most of the drop*.c files, and mshowbest.c, to ensure that coordinates displayed with -m 9(c) and the final alignment are consistent. They were consistent for fasta34/ssearch34/fasts34, but not for fastx34/fasty34. The alignment coordinate system has been been revised for consistency in allthe drop*.c programs (coordinates used to be off-by-one for some, but not other functions). Fixes to -m 9c for fasty34/pv34compfy. In addition, a problem was fixed with fastx34/fasty34 that appeared with a protein sequence was considerably longer than the DNA query, e.g. an EST vs titin (26K residues). This problem only appeared on pv34compfx/fy on Xserve's under OS_X; but it should improve fastx34/fasty34 performance with very long protein sequences on all platforms. >>May 7,8 2003 Changes to p2_workcomp.c, compacc.c, and p_mw.h to fix persistent bugs in the -m 9c display. Previous pv34comp* programs would not return the correct coded alignment if more than 100 alignments came from the same node, or if an encoding was longer than 127 chars. Also, fixes to p2_complib.c, comp_lib.c, to allow long query sequences to be segmented. Previously, only the first 20,000 residues were used. The segmented queries are not overlapped; segmented library sequences are. >>May 5, 2003 Changes to last_tat.c, scaleswt.c to ensure that all fasts alignments that are likely to have significant scores are displayed. In previous implementations, if the query had more than 10 fragments, only the 100 best scores were shown. Now, we rescore up to 2500 alignments. The new approach allows large mixtures to be used for searches, where some of the fragments from the mixture match too many proteins (e.g. actins). Some differences between the fasts34 and pv34compfs implementations have been fixed. The two programs typically will not give exactly the same results, because of small differences in the sampling procedures, but the results are essentially equivalent. >>Apr 11, 2003 CVS fa34t21b3 Fixes for "-E" and "-F" with ssearch34, which was inadvertantly disabled. A new option, "-t t", is available to specify that all the protein sequences have implicit termination codons "*" at the end. Thus, all protein sequences are one residue longer, and full length matches are extended one extra residue and get a higher score. For fastx34/tfastx34, this helps extend alignments to the very end in cases where there may be a mismatch at the C-terminal residues. -m 9c has also been modified to indicate locations of termination codons ( *1). >>Mar 17, 2003 CVS fa34t21b2 A new option on scoring matrices "-MS" (e.g. "BL50-MS") can be used to turn the I/L, K/Q identities on or off. Thus, to make "fastm34" use the isobaric identities, use "-s M20-MS". To turn them off for "fasts34", use "-s M20". More fixes for correct alignment coordinates. There was a conflict between -m 9 and -m 9c and subsequent alignment displays. >>Mar 13, 2003 Various fixes to produce correct fastm34 alignments. Changes to all functions to correct potential problem with -m 9 alignment coordinates when both -m 9 and actual alignments are shown. >>Feb 25,27, 2003 Modifications to re-activate showsum.c, which included corrections to the showbest() call in p2_complib.c. >>Feb 13, 2003 CVS fa34t21b1 Modifications to dropfx.c to dramatically improve alignment speed for cases where the DNA sequence is considerably longer than the protein sequence. Previously, a 200 aa vs 5000 nt comparison would do a full 200 x 5000 Smith-Waterman alignment; with this modification, no more than a 200 x 1200 (2x3x200) alignment is done. This optimization has not (yet) been applied to dropfz2.c (fasty/tfasty). >>Feb 11, 2003 Small modifications to comp_lib.c, p2_complib.c, and nmgetlib.c to pass openlib() a possibly old lmf_str. This allows openlib() to re-use memory mapped files. closelib() no longer releases memory mapped file buffers. Under Linux, memory mapped file buffers were not really released, so when comparing a set of sequences against nr, the program could not mmap() the database after several searches. This will also speed up memory mapped multiple sequence searches. >>Jan 28-31, 2003 CVS fa34t21b0 Fix another bug (all of v34t20) involved with overlapping long sequences. And another bug that occurred when using sampled statistics, but appeared only on the SGI platform - thanks to Dmitri Mikhailov. Several other issues have been addressed based on more instrumented runtime testing. Fix an old (all v34) bug that caused problems with -z 11-16 (shuffled sequence array was not allocated properly). Fixed another bug with -z 6/16 when using threaded (_t) searches in fasta34_t. Restructure statistical analysis functions (scaleswn.c, scaleswt.c) to return the "final" statistical estimation routine done in pst.zsflag_f. This allows the program to cope with searches against a single sequence correctly. Corrected an error for DNA sequences needing Altschul-Gish statistics. >>Jan 25, 2003 Add option "-J start:stop" to pv34comp*/mp34comp*. "-J x" used to allow one to start at query sequence "x"; now both start and stop can be specified. >>Jan 14, 2003 Changes to apam.c to provide an error message on stderr when a scoring matrix cannot be found. Changes to dropfs2.c, initsw.c, initfa.c to provide -m9c information for fasts34 searches. Modify the alignment algorithm to use probabilistic scores properly. >>Dec 22, 2002 Change to compacc.c (sortbeste()) to do a second sort on zscore when several sequences have E() == 0. >>Nov 27, 2002 Change FSEEK_T to fseek_t to keep Borland BCC5 happy. >>Nov 14-22, 2002 CVS fa34t20b6 Include compile-time define (-DPGM_DOC) that causes all the fasta programs to provide the same command line echo that is provided by the PVM and MPI parallel programs. Thus, if you run the program: fasta34_t -q -S gtt1_drome.aa /slib/swissprot 12 the first lines of output from FASTA will be: # fasta34_t -q gtt1_drome.aa /slib/swissprot FASTA searches a protein or DNA sequence data bank version 3.4t20 Nov 10, 2002 Please cite: W.R. Pearson & D.J. Lipman PNAS (1988) 85:2444-2448 This has been turned on by default in most FASTA Makefiles. Fix p2_complib.c so that qstats[] is always allocated before it is used. Fix serious bug in non-threaded comp_lib.c that caused some high scoring sequences to be missed by fasts34. New tests are included in test.sh to detect this problem in the future. The shell sort algorithm in sortbeste(), sortbestz(), and sortbesto() has been modified to use an improved algorithm that will not go quadratic in pathological cases. nmgetlib.c and mmgetaa.c have been modified to remove "^A" in libstr when used with p2_complib.c. Fix problem with MAXSEG in tatstats.h with IBM/AIX. Changes to most Makefiles to use -DSAMP_STATS; fixes to p2_complib.c for SAMP_STATS. >>Oct 22, Nov 3, Nov 9, 2002 CVS tag fa34t20b5 Fix problem in comp_lib.c that caused the query sequence length to be counted twice. Fixed problem with prss34 (updated find_zp in showrss.c). Correct shuffling function in several places. Add jitter back to addhistz() - improves appearance with prss34. Changes to fix problems with aln_code using -m 9c. Fix to serious bug in scaleswt.c (fasts34, etc) that caused sorts on the high scores to take much to long. The program is now 10X faster, and scales well on PVM/MPI. Fix to llgetaa.c to work with new getseq() API with automatic alphabet recognition. >>Oct 12, 2002 CVS tag fa34t20b4 Several very obscure (and sometimes old) bugs that appeared in certain MPI environments have been fixed. This occurred because the pst.sq[] array did not always have a '\0' at the end. In addition, mshowalign.c/p2_workcomp.c sometimes failed to put the '\0' at the end of seqc0/seqc1. Correct bug introduced in fa34t20b3 for fasts34(_t). >>Oct 9, 2002 CVS tag fa34t20b3 Fix to apam.c build_xascii() to not zero-out qascii[0]. Fix Makefile.pvm4. Mix problem with -m 9c with compacc.c. >>Sept 28, 2002 Additional fixes to -m 9c in p2_complib.c/compacc.c/mshowbest.c. Remove restriction in fasts34(_t) to less than 30 peptides (though no more than 30 peptides can be aligned currently). >>Sept 24, 2002 Fix p2_workcomp.c so that e_scores are delivered correctly when last_calc flag is set, and -m 9c provides alignments when only one best hit is present. Fix comp_lib.c to use different maxn and overlap for each different query sequence. fasta34 and fasta34_t now have identical results when a long sequence is searched. Add '@C:101' support to memory mapped FASTA format files. Fix mshowalign.c so that coordinates returned by cal_coord() use loffset+l_off. >>Sept 14, 2002 CVS tag fa34t20b2 Changes to p2_complib.c, compacc.c to fix statistics problems with pv34compfs on query sequences with more than 10 fragments. >>Aug 27, 2002 Modifications to mshowbest.c and drop*.c (and p2_workcomp.c, compacc.c, doinit.c, etc.) to provide more information about the alignment with the -m 9 option. There is now a "-m 9c" option, which displays an encoded alignment after the -m 9 alignment information. The encoding is a string of the form: "=#mat+#ins=#mat-#del=#mat". Thus, an alignment over 218 amino acids with no gaps (not necessarily 100% identical) would be =218. The alignment: 10 20 30 40 50 60 70 GT8.7 NVRGLTHPIRMLLEYTDSSYDEKRYTMGDAPDFDRSQWLNEKFKL--GLDFPNLPYL-IDGSHKITQ :.:: . :: :: . .::: : .: ::.: .: : ..:.. ::: :..: XURTG NARGRMECIRWLLAAAGVEFDEK---------FIQSPEDLEKLKKDGNLMFDQVPMVEIDG-MKLAQ 20 30 40 50 60 would be encoded: "=23+9=13-2=10-1=3+1=5". The alignment encoding is with respect to the beginning of the alignment, not the beginning of either sequence. The beginning of the alignment in either sequence is given by the an0/an1 values. This capability is particularly useful for [t]fast[xy], where it can be used to indicate frameshift positions "/#\#" compactly. If "-m 9c" is used, the "The best scores" title line includes "aln_code". >>Aug 14, 2002 CVS tag fa34t20 Changes to nmgetlib.c to allow multiple query searches coming from STDIN, either through pipes or input redirection. Thus, the command cat prot_test.lseg | fasta34 -q -S @ /seqlib/swissprot produces 11 searches. If you use the multiple query functions, the query subset applies only to the first sequence. Unfortunately, it is not possible to search against a STDIN library, because the FASTA programs do not keep the entire library in memory and need to be able to re-read high-scoring library sequences. Since it is not possible to fseek() against STDIN, searching against a STDIN library is not possible. >>Aug 5, 2002 fasts34(_t) and fastm34(_t) have been modified to allow searches with DNA sequences. This gives a new capability to search for DNA motifs, or to search for ordered or unordered DNA sequences spaced at arbitrary distances. >>Aug 4, 2002 comp_lib.c has been modified to provide comp_mlib.c function. comp_mlib.c is no longer used. comp_lib.c with the "mlib" function can now recognize protein or DNA sequences automatically, and reads from stdin can now detect DNA/protein sequence types automatically. Changes to compacc.c, getseq.c, doinit.c initfa.c, initsw.c, and nmgetlib.c to support automatic sequence type detection. >>July 28-31, 2002 (1) The various Makefile's have been "normalized". The fast*34[_t] (Makefile.34m.common[_sql]), Makefile.pvm4[_sql], and Makefile.mpi4[_sql] make files all use a common set of filenames, described in Makefile.fcom. This greatly simplifies adding programs, but requires that all *.o files be deleted when moving from fast*34* to pv34comp* to mp34comp*. (2) showalign.c/p_showalign.c have been merged into mshowalign.c showbest.c/manshowbest.c have been merged into mshowbest.c. Some of the related files (showun.c, manshowun.c, have not been merged or tested). (3) Code for ranking scores with valid e_value's incorporated. (4) Bug fixes in p2_complib.c, so that fasts34/fasts34_t/pvcompfs provide identical statistics. >>July 26, 2002 Makefile.pvm4_sql and Makefile.pvm4 have been substantially simplified by providing the worker program name from the h_init() function in the initfa.c/initsw.c files. >>July 24, 2002 Substantial modifications to param.h, structs.h to ensure that no sequence specific information is kept in struct pstruct. This structure now holds the pam[] matrix, and other scoring parameters, but nothing that is dependent on aa0. The aa0 dependent stuff (nm0, Lambda, K, etc) is now stored in struct mngmsg. This was mostly done to support the pv34comp* programs, which have separate mngmsg structures but the same pstructs. The fasts34, fasts34_t, and pv34compfs/c34.workfs have all been tested successfully. >>July 19, 2002 Fix an old bug in the calculation of E()-values in DNA databases longer than 2147483647 residues on machines with 32-bit longs. >>July 28-31, 2002 (1) The various Makefile's have been "normalized". The fast*34[_t] (Makefile.34m.common[_sql]), Makefile.pvm4[_sql], and Makefile.mpi4[_sql] make files all use a common set of filenames, described in Makefile.fcom. This greatly simplifies adding programs, but requires that all *.o files be deleted when moving from fast*34* to pv34comp* to mp34comp*. (2) showalign.c/p_showalign.c have been merged into mshowalign.c showbest.c/manshowbest.c have been merged into mshowbest.c. Some of the related files (showun.c, manshowun.c, have not been merged or tested). (3) Code for ranking scores with valid e_value's incorporated. (4) Bug fixes in p2_complib.c, so that fasts34/fasts34_t/pvcompfs provide identical statistics. >>July 26, 2002 Makefile.pvm4_sql and Makefile.pvm4 have been substantially simplified by providing the worker program name from the h_init() function in the initfa.c/initsw.c files. >>July 24, 2002 Substantial modifications to param.h, structs.h to ensure that no sequence specific information is kept in struct pstruct. This structure now holds the pam[] matrix, and other scoring parameters, but nothing that is dependent on aa0. The aa0 dependent stuff (nm0, Lambda, K, etc) is now stored in struct mngmsg. This was mostly done to support the pv34comp* programs, which have separate mngmsg structures but the same pstructs. The fasts34, fasts34_t, and pv34compfs/c34.workfs have all been tested successfully. >>July 8, 2002 Modifications to comp_lib.c, initfa.c and new scaleswt.c, tatstats.c to support FASTS with Tatusov statistics. last_params() has been introduced to allow aa0 dependent changes in m_msg/pstr. sortbest() has been moved into initfa.c/initsw.c to make it function specific. find_z() takes an additional parameter, escore. The do_work() results structure, beststr, and stat_str all accommodate escores as well as integer scores (stat_str also saves segn and segl but doesn't need them). In scaleswt.c, process_hist() now knows much more about Tatusov statistics. last_stats() provided to accommodate rank-based statistical corrections. scale_scores() is the last function to modify the beststr scores (final calculation of E-value). Some sortbest*() calls and some bptr[i]->zscore=find_zp() loops have been moved into scale_scores(); >>July 3,5, 2002 Modifications to allow mySQL comments (--) in "library.sql 16" files. Thus, a first line of: --host seqdb user password; is read by FASTA as the login information to a mySQL server, but is ignored by mySQL. "DO" commands in FASTA mySQL files can also be rendered invisible to mySQL in this way. See "do.sql". Modifications to mysql_lib.c to allow very long SQL statements. The buffer is now dynamically reallocated in 4Kb chunks. The fasta3.1 man page has been updated and re-organized. >>June 26, 2002 Minor modifications to nmgetaa.c (openlib()) to use the same arguments for searching and PRSS. PRSS needs access to all of m_msg, but searches do not. Other small fixes to comp_mlib.c, towards the goal of merging comp_mlib.c and comp_lib.c. >>June 25, 2002 Modify the statistical estimation strategy to sample all the sequences in the database, not just the first 60,000. The histogram is still based only on the first 60,000 scores and lengths, though all scores an lengths are shown. The fit to the data may be better than the histogram indicates, but it should not be worse. Currently, this modification is available only if the -DSAMPLE_STATS option is defined. >>June 23, 2002 CVS fa34t11d4 Fix a very long-standing bug in fasty/tfasty that caused 'NNN' to be translated as 'S', rather than 'X'. fastx/tfastx has done this correctly for many years, but the fasty/tfasty code that I received from Zheng Zhang was not implemented correctly (my fault, his code was fine). >>June 19, 2002 Added "-C #" option, where 6 <= # <= MAX_UID (20), to specify the length of the sequence name display on the alignment labels. Until now, only 6 characters were ever displayed. Now, up to MAX_UID characters are available. >>May 30, 2002 CVS fa34t11d3 Fixed problem with programs using the default -E cutoff when -b was provided. With this implementation, -E can override -b, but -b overrides the default -E. Fixed problem with 64-bit file offsets in param.h (change USE_FSEEK0 -> USE_FSEEKO, include -D_LARGEFILE_SOURCE and -D_LARGEFILE64_SOURCE in Makefile.linux_sql). Put limits on alignment display length (200 chars). More checks for null returns from SQL queries. >>Apr 17, 2002 CVS fa34t11d2 Fixed bug in mm_file.h/ncbl2_mlib.c that caused the SGI version to be unable to read blast2 format files. Changed "mp_*" tags to "pg_*" for -m 10 option. >>Mar 30, 2002 Fix embarrassing bug in revcomp() (getseq.c) that failed to complement the central nucleotide in a sequence with an odd number of residues. Small changes to dropfs.c for more segments. >>Mar 16, 2002 Added create_seq_demo.sql, nt_to_sql.pl to show how to build an SQL protein sequence database that can be used with with the mySQL versions of the fasta34 programs. Once the mySQL seq_demo database has been installed, it can be searched using the command: fasta34 -q mgstm1.aa "seq_demo.sql 16" mysql_lib.c has been modified to remove the restriction that mySQL protein sequence unique identifiers be integers. This allows the program to be used with the PIRPSD database. The RANLIB() function call has been changed to include "libstr", to support SQL text keys. Due to the size of libstr[], unique ID's must be < MAX_UID (20) characters. A "pirpsd.sql" file is available for searching the mySQL distribution of the PIRPSD database. PIRPSD is available from ftp://nbrfa.georgetown.edu/pir_databases/psd/mysql. >>Mar 6, 2002 Fix showbest.c showbest() to report pst.zdb_size as database size. Fix dropnfa.c spam() to address off-by-one on end of run, and double counting on backwards scan. Fix dropnfa.c do_fasta() to fix another problem introduced by -S. Changes to comp_lib.c to ensure that both the beginning and end of the query and library sequence have '\0' present. Changes to initfa.c, initsw.c to ensure that a match to a lower-case letter with -S gets exactly the same score as a match to an 'X'. Changes to mmgetlib.c to work with 64-bit longs in *.xin files. >>Feb 26, 2002 Fixes to doinit.c, initfa.c, initsw.c to allow DNA matrices using the "-s dna.mat" option. A new matrix, "d50ry.mat" is available that scores +5 for a match, -2 for a transition, and -5 for a transversion. "d50ry.mat" corresponds to DNA PAM50 with transitions twice as common as transversions. When "-s dna.mat" is used, "-n" MUST be used as well. Query sequence names ("aa", "nt") should be more accurate. >>Feb 22, 2002 Fix to getseq.c to allow "plain" sequence files. >>Feb 12, 2002 Minor fix to res_stats.c. >>Jan 28, 2002 Fixes to resurrect res_stats.c. res_stats (cc -o res_stats res_stats.c scaleswn.c -lm) takes the output from a current "-R file.res" file and calculates statistical significance - this allows one to take exactly the same set of scores (and lengths) and calculate statistical estimates using different strategies. >>Jan 24, 2002 modifications to mmgetlib.c, ncbl2_mlib.c to more robustly read memory mapped files (*.xin, map_db) on machines lacking "native" 64-bit longs. If the machine provides some definition for a 64-bit long (e.g. "long long", "int64_t"), things should work. 64-bit offsets into memory mapped files work properly on Alpha, SGI, i386 Linux, and MacOSX. The current implementation depends either on 64 bit longs (Compaq Alpha's pre 4.0G) or the file. Makefile, Makefile.alpha, and Makefile.linux have been modified. Modifications to nmgetlib.c, mmgetlib.c to provide GI numbers and Accession versions for Genbank searches. If the GI:123456 number is available, it will be used and the description line will be formatted: gi|123456|gb|ACC1234.1|LOCUS description This should help FAST_PAN runs, where the version of a sequence changes frequently. >>Jan 10, 2002 Modifications to p2_complib.c, p2_workcomp.c to more reliably allocate space for library sequence descriptions on the master and workers. >>Jan 2-3, 2002 CVS fa34t10c/fa34t10d3 Fixes to comp_lib.c to support Macintosh and Windows/Turbo-C compilation. New Makefile.tc. Macintosh version supports both "Classic" and "Carbon" environments. "" has been replaced with the more modern "" Fixes to p2_complib.c to support n_libstr (libstr length) in GETLIB(). comp_thr.c, complib.c removed. >>Dec 16, 2001 Complete integration of comp_mlib.c with both the unthreaded and threaded programs. Comp_mlib allows fasta34 and fasta34_t to compare a database with a second database, just as pv34compfa does. Using multiple queries with fasta34_t is not as efficient as pv34compfa (and it cannot use networks of Unix workstations), but it is much easier to use and install. With the comp_mlib.c option, fasta34 cannot automatically recognize DNA sequences, just as pv34compfa no longer recognizes DNA sequences. You must use the "-n" option to search with DNA sequences. The other programs (fastx34, tfastx34, etc) "know" the type of the query and database sequences, so "-n" is only required for fasta34(_t). >>Dec 14, 2001 CVS tag fa34t10b Fix problems reading DNA databases in blast2 format. >>Dec 11, 2001 Changes to spam() in dropnfa.c so that, for DNA sequences, the previous behavior for finding the boundaries of a local alignment region use the same algorithm as previous versions of fasta. For protein sequences, the algorithm will extend the local region beyond the "ktup" boundaries if a better score can be found. For DNA sequences, this raises the noise rather than increasing sensitivity, so it is turned off and "ktup" boundaries are respected. The old, "ktup" boundary algorithm is available with -DNOSPAM_EXT. This version also includes a working res_stats.c, which can be used to test various statistical estimates on exactly the same set of scores. Fixed problems with -m 9 percent identity for fastx/fasty/tfastx/tfasty. These errors have been present since -m 9 was implemented. >>Dec 10, 2001 Fix to map_db.c to work correctly with files > 2 Gb when 64-bit longs are available. It is not yet designed to work with ftello() and other offset types. >>Nov 11,21, 2001 CVS tag fa34t10a, fa34t10d1 Substantial changes to revcomp(), getseq(), and other functions to correct problems with -S on DNA sequences. Sequences with lower case nucleotides were not recognized or reverse complemented properly. Fix to dropnfa.c (v34t07, Nov 21, 2001) bg_align() to re-initialize static globals - this fixes a problem encountered with pv34compfa. A new main program, comp_mlib.c has been added to the CVS archive, although it is not referenced in any of the Makefile. comp_mlib.c works like p2_complib.c and compares a library against another library. >>Nov 4, 2001 Change to dropnfa.c spam () while(1) -> while(lpos <= dmax->stop). This fixes a problem with ktup=1 on Suns only, so far. >>Oct 4, 2001 CVS tag fa34t10 Add comp_lib.c file, which merges complib.c (unthreaded) and comp_thr.c (threaded) code into one file. Modifications to nmgetlib.c, mmgetaa.c to allow Genbank flatfile format without DESCRIPTION or ACCESSION lines. Additional fix for -S with ktup=1. >>Sept. 24, 2001 Fix to have correct gap-penalties for short scoring matrices with tfastx/fastx. >>Sept. 10, 2001 CVS tag fa34t05d6 Fix a bug introduced by -S fix in fa34t05d5. Also, try to remove changes in p34compfa compared to pv4compfa output. >>Sept. 6, 2001 CVS tag fa34t05d5 Fix the -S dropnfa/fx/fz2 bug that was not actually fixed in fa34t05d4. Incorporate the correct scaleswn.c refered to in fa34t05d4. >>Sept. 5, 2001 CVS tag fa34t05d4 Fix problem with m_msg.quiet that prevented interactive prompts for ktup, file name, etc with threaded programs. Fix serious bug in dropnfa.c/dropfx.c/dropfz2.c that caused -S to work improperly on sequences with effective length of 3 or less. Change to scaleswn.c to make mle_cen(), mle_cen2() more robust to cases where the top and bottom scores are the same. Change p2_complib.c to avoid compiler complaints with (void *)wstage2p=NULL on some platforms. >>Aug. 30, 2001 CVS tag fa34t05d3 Fixed problem with uthr_subs.c for Suns, but changed Makefile.sun to use pthreads rather than Sun Unix threads. Removed SQL stuff from Makefile.mpi4/pvm4 and added Makefile.mpi4_sql/pvm4_sql. fa34t05d2 - fix to map_db.c to provide *sascii. fa34t05d1 - fixes to ibm_pthr_subs.c and Makefile.ibm from IBM. >>Aug. 20, 2001 CVS tag fa34t05d0 The pvm/mpi complib programs have been substantially updated with release 3.4. See readme.v34t0 for more information. With version 3.4, the MPI programs are mp34comp*, mu34comp*, etc. A major effect of this change is to disable automatic sequence type (protein/DNA) recognition with pv34compfa/mp34compfa. By default, protein libraries are assumed. Thus, pv34compfa/mp34compfa require the "-n" command line option when running pv34compfa/mp34compfa on DNA sequence libraries. This issue does not occur with the other programs, which will recognize the appropriate sequence type, because it is determined by the program (e.g. pv34compfx requires DNA:protein). Fixed substantial problem with 64-bit file offsets for Linux in complib.c/comp_thr.c, p2_complib.c. This problem, solved by Doug Blair, was preventing the threaded versions from working properly in memory mapped mode. In all earlier versions of fasta, when very long sequences were searched, the sequence length reported was that of the "chunk" that was actually searched (typically 80,000-query_length) rather than the actual library sequence length. The peculiar behavior now changed, and the full length of the library sequence, not the sequence chunk, is reported as the library sequence length. Note that chunks are still used, however, which can cause the same alignment to be shown twice. In addition, the "-m 9" output format has changed to report the coordinates of the query and library sequence (see below), which may be different from 1-sequence_length because the the query and library sequences may have been extracted from larger sequences. Four additional fields have been added, "pn0", "px0","pn1", "px1" that are the positions in for the beginning (pn0/1) and end (px0/1) of they query/library sequence. pn0/1 would typically be changed with the "@C:#" directive, described below. Changes to doinit.c/initfa.c/initsw.c to provide a new function - f_lastenv() - that allows function-specific adjustments to parameters after the command line options have been read but before the first sequence is read. This change solved problems with "mp/pv34compfx -S". fasts34/tfasts34 now recognize that 'I/L' are the same, as are 'Q/K' (which are apparently indistinguishable by Mass-Spec). The latter identity is on by default, but can be turned off with "-h 0". The MPI/PVM versions of the programs have been tested extensively with compfa, compfx, and comptfx. Makefile.mpi4 now works properly. Changes to p2complib.c to support the PVM option "-T 1-4", which allows one to run on nodes 1-4 of a (presumably larger) PVM virtual machine. This option has no effect on the mp34comp* programs. The old "-T 4" to run on 4 nodes, is also available. If each node has 2 cpu's, as indicated in the "pvmd hostfile", both CPU's will be used for a total, in this example, of 8 processes. This allows one to specify a large PVM machine and use separate parts of it independently. Changes to nmgetlib.c to fix problems with longer dates in GCG files (Y2K). Fixes to faatran.c for extended alphabets and 'X's. Various code clean-ups to make "gcc -Wall" a little bit (not much) happier. This is the first distributed fasta34 version. ================ >>Aug 9, 2001 CVS tag fa34t05 Corrections to initfa.c to allow -S to work with tfastx/y. Fix to manshowbest.c for query position with -m 9. >>July 18, 2001 CVS tag fa34t04 Various changes to complib.c, comp_thr.c, p2_complib.c, showbest.c, showalign.c to deal with overlapping alignments in long sequences that have been segmented. When long sequences are segmented (lcont>0), the eventual total length (n1tot_v) is saved at beststr->n1tot_p. If there was no lcont, then beststr->n1tot_p = NULL, and beststr->n1 should be used as the sequence length. This has the advantage of requiring space only when long sequences are encountered, and requiring only one integer for several segments. m_msg.noshow has been removed. The -m 9 format has been changed - 5 fields have been added, 4 (pmn0/pmx0/pmn1/pmx1) provide the beginning and end coordinates of the query and library sequence; the last (fs) reports the number of frameshifts. The names of the alignment boundaries have been changed from min0/max0/min1/max1 to amn0/amx0/amn1/amx1 (Alignment miN/maX). The SQL format has been extended to provide for statements that do things but do not generate results, such as creating and selecting into a temporary table, e.g.: ================ do create temporary table seq_pos ( id int unsigned not null auto_increment primary key, prot_id int unsigned not null default 0, start int unsigned not null default 0, length int unsigned not null default 0, ) ; do insert into seq_pos (prot_id, start, length) select id, 11, len-10 from protein, annot where len > 100 and annot.protein_id = protein.id and annot.pref=1 ; select seq_pos.id, substring(protein.seq, start, length), concat("@C:", start, " ", descr) from protein, seq_pos, annot where protein.id = annot.protein_id and protein.id = seq_pos.prot_id and annot.pref = 1 ; select prot_id, concat("@C:", start, " ", descr) from seq_pos, annot where annot.protein_id = seq_pos.prot_id and seq_pos.id = # and annot.pref = 1 ; ================ In the current implementation, these statements must start with "DO" as the first two characters on the line, and come immediately after a line ending with ';'. The text from "DO" to the next ";", excluding the "DO", is executed when the database connection is made. ===== >>July 12, 2001 The allocation of the work_info data structure used to send information to the worker threads has been changed. The old method worked, possibly by accident. A bug in p2_complib.c that caused E()-values to be calculated improperly for the first query sequence has been fixed. >>July 11, 2001 --> fa34t02 It is now possible to specify output coordinates in library sequences by including the string: "@C:number" on the description line, e.g. >gtm1_human gi|12345 human glutathione transferase M1 @C:21 would label the first residue in the library sequence "21" rather than "1". This capability has been included to provide accurate coordinates for searches done against subsequences generated by an SQL query. For example, one could use a query of the form: SELECT protein.id, substring(protein.seq,11,length(protein.seq)-20), concat(protein.name," @C:11 ",protein.descr) FROM protein; to generate a sequence set with each sequence starting with residue 11. Without the "@C:11" option on the description line, the program would number the alignment positions starting at 1, even though the first residue of the sequence really started at 11. "@C:11" allows one to correct the coordinate system. Currently, "@C:offset" is available only with library type 1 (fasta format) and 16 (mySQL). The SQL-generated database with "@C:offset" can be used with both the fast*34(_t) programs and with pv34comp*. However, the SQL syntax is used differently in the fasta34 and pv34compfa programs. fast*34(_t) requires three SQL statements during a search: (1) a statement to generate a large set of library sequences; (2) a statement to generate a description of a single sequence, given a unique identifier provided by (1); and (3) a statement to generate a single sequence given a unique identifier provided by (1). For fast*34 searches, the third (3) SQL statement must provide the "@C:offset" information in the third results field for the offset to be used. It is optional in (1) and (2). The pv34comp* programs only require one SQL statement, statement (1) above, which must provide three fields, a unique identifier, the sequence, and a complete description that must include "@C:offset" if substrings are used. If SQL queries (2) and (3) are provided, they are ignored. Thus, the same files can be used by both programs, but the "@C:offset" is required in different SQL queries by the fast*34 and pv34comp* programs. Other changes: Re-incorporation of GAP_OPEN option; fix to Altschul-Gish stats when GAP_OPEN is used. Re-incorporation of A. Mackey's spam() improvement in dropnfa. Fixes to include file ordering to allow fast*34(_t) pv34comp* programs to compile. Fix to lascii[] for SQL database queries. Fix to an old bug in comp_thr.c to send individual worker_info structures to threads (does not fix LINUX threads problems, however). ===== >>July 9, 2001 Considerable changes to support no-global library functions. (1) Separate ascii/sequence mapping arrays are used by the query-reading (qascii), library-reading (lascii), and sequence comparison function (pascii) routines. As a result, there is no longer a need for tgetlib.o/lgetlib.o - lgetlib.o can serve both functions. (2) This also allows us to remove all #ifdef TFAST/FASTX conditionals from complib.c/comp_thr.c/p2_complib.c. We no longer need tcomp_thr.o, comp_thrx.o, etc. We still have a variety of p2_complib.o variations to support the different c34.work* files. (3) Because non-global openlib/getlib functions are available, exactly the same open/get functions are available for reading both the query and reference libraries in pv34comp* programs. The host-specific openlib/getlib functions in hxgetaa.c are now provided by nmgetlib.c, etc. This has two effect: (a) it is now possible to compare a query database generated by an SQL query to a library database generated by a different SQL query. (b) pv34comp* has lost (at least in this version) the ability to automatically detect the query sequence type. To search with a DNA query, you MUST use "-n". (4) the resetp() function is now responsible for almost all of the function sepcific (TFAST/FASTX/etc) initializations. All of the function specific code has been removed from complib.c/comp_thr.c and most of it has been moved to initfa.c/resetp(). (5) manageacc.c has been merged into compacc.c (mostly prhist()). ===== >>June 1, 2001 Many changes to accommodate a new - no global variable - strategy for reading sequence databases. Every time a file is opened, a struct lmf_str is allocated which can be used for memory mapped files, ncbl2, files, and mysql files. In addition, an open'ed file has a default sequence type: DNA or protein, or one can open a file in a mode that will allow the sequence type to be changed. ===== >>May 18, 2001 CVS: fa33t09d0 A new compile time parameter - -DGAP_OPEN, is available to change the definition of the "-f gap-open" parameter from the penalty for the first residue in a gap to a true gap-open penalty, as is used in BLAST and many other comparison algorithms. This will probably become the default for fasta in version 3.4. Fixes to conflicts between "-S" and "-s matrix". When a scoring matrix file was specified, lower-case alignments were not displayed with -S (although the scores were calculated properly). More extensive testting of mysql_lib.c (mySQL query-libraries) with the pv4comp* and mp4comp* programs. ===== >>April 5, 2001 CVS: fa33t08d4b3 Changes in nmgetlib.c and ncbl2_mlib.c to return long sequence descriptions for PCOMPLIB (pv4/mp3comp*). Also fix p2_complib.c to request DNA library for translated comparisons. Fix for prss33(_t) to read both sequences from stdin. ===== >>March 27, 2001 CVS: fa33t08d4 Modifications to allow 64-bit fseek/ftell on machines like Sun, Linux/Intel, that support -D_FILE_OFFSET_BITS=64, -D_LARGE_FILE_SOURCE off_t, and fseeko(), ftello() with the option -DUSE_FSEEKO. Machines with 64-bit long's do not need this option. Machines with 32-bit longs that allow files >2 Gb can do so with 64-bit file access functions, including fseeko() and ftello(), which work with off_t file offsets instead of long's. ===== >>March 3, 2001 CVS: fa33t08d2 Corrected problems in nmgetaa.c and mysql_lib.c with parallel programs, and one serious problem with alternate DNA scoring matrices (initfa.c, initsw.c) not being set properly. A subtle problem with the merge of scaleswn.c and scaleswg.c is fixed. >>February 17, 2001 Modified mysql_lib.c to use "#", rather than "%ld", to indicate the position of the GID. This change was made because sprintf() cannot be used reliably to generate an SQL string, as '"' and '%' are used in such strings. ===== >>January 17, 2001 (no version change, date change) Minor fixes to initfa.c, initsw.c to deal with DNA scoring matrices properly. "-n -s dna.mat" is required for the sequence/matrix to be recognized as DNA. >>January 16, 2001 -->v34t00 Merge of the main CVS trunk - fa33t06 with the latest release branch, fa33t08. In addition, PCOMPLIB mods have been made to mysql_lib.c. Because p2_complib.c gets sequence description information during the first read of the database, the mysql_query must be changed to return: result[0]=GID, result[1]=description, result[2]=sequence. In the PCOMPLIB case, the other SQL queries (for GID description, sequence) are not necessary but must still be provided. fasta36-36.3.8i_14-Nov-2020/doc/readme.v35000066400000000000000000000466071433453312700172430ustar00rootroot00000000000000 $Id: readme.v35 120 2010-01-31 19:42:09Z wrp $ $Revision: 55 $ >>Sep. 10, 2008 Fix problem in init_ascii() call for p2_complib2.c. >>Sep. 9, 2008 Fix bug in display of library name when written to an output file (rather than stdout). >>Aug. 28, 2008 fa35_04_02 SVN Revision: 45 Fix serious bug in alignment generation that only occurred when large libraries were used as a query with [t]fast[x/y]. This bug often resulted in a core dump. Address some other issues with uninitialized variables with -m 9c. >>Jul. 15, 2008 fa35_04_01 SVN Revision: 38 Correct problems with Makefiles. Add information on compiling to README. Address issue with mp_KS for -m 10 when searching small libraries. >>Jul. 7, 2008 fa35_04_01 SVN Revision: 35 Fix problems that occurred when statistics are disabled with -z -1, both for a normal library search, and for searches of a small library. >>Jul. 3, 2008 SVN Revision: 33 Continue to fix an issue with 'J' and -S. >>Jun. 29, 2008 SVN Revision: 29, 31 Fix additional problems with Makefiles, some issues uncovered with Solars 'C' compiler (Rev. 30). Discover serious bug when searching long, overlapping sequences, such as genomes. The length of the library sequence was not updated to reflect the length of the new region plus the overlap. Fix inconsistency in the value of 'J' between uascii.h/aascii[] and pascii[]. Add code to ensure that lascii[], qascii[], never return a value outside pam2[][] (all <= pst.nsq) (particularly for 'O' and 'U' amino-acids). exit(0) returns for map_db, list_db. >>Jun. 11, 2008 Correct bug in scaleswn.c that prevented exact matches to queries < 10 residues from being scored and displayed. >>Jun. 1, 2008 Address various cosmetic issues in FASTA output: (1) Modify comp_lib2.c so that -O outfile works when multiple queries are compared in one run. (2) remove the duplicated query sequence length in the 1>>>query line. (3) in -m 10 output, the tags "pg_name" and "pg_ver" were duplicated, e.g. >>>K1HUAG, 109 aa vs a library ; pg_name: fasta35_t ; pg_ver: 35.03 ; pg_argv: fasta35_t -q -b 10 -d 5 -m 10 ../seq/prot_test.lseg a ; pg_name: FASTA ; pg_ver: 3.5 Sept 2006 The ; pg_ver and ; pg_name produced by the get_param() functions in drop*.c have been renamed ; pg_ver_rel and ; pg_ver_alg. >>>K1HUAG, 109 aa vs a library ; pg_name: fasta35_t ; pg_ver: 35.03 ; pg_argv: fasta35_t -q -b 10 -d 5 -m 10 ../seq/prot_test.lseg a ; pg_name_alg: FASTA ; pg_ver_rel: 3.5 Sept 2006 Modify mshowbest.c, mshowalign.c to highlight E() values ( in HTML output. >>Apr. 16, 2008 fa35_03_07 Merge fa35_ann1_br, which allows annotations in library sequences. The PVM/MPI parallel version now support query sequence annotations and -m 9c annotation encoding. It does not yet support library annotations. Tested with both PVM and MPI. >>Apr. 2, 2008 fa35_03_06 Ensure that code in last_init() to modify ktup never increases ktup value. Add fasta_versions.html to more explicitly describe programs available. >>Mar. 4, 2008 Fix parsing of parameters (matrix, gap open, gap ext) in ASN.1 PSSM files produced by blastpgp. >>Feb. 18, 2008 fa35_03_05 Re-implement -M low-high sequence range options. Sequence range restriction has probably been missing since the introduction of ggsearch and glsearch, which use a new approach to limiting the sequence range. >>Feb. 7, 2008 fa35_ann1_br Add annotations to library sequences (they were already available in query sequences). Currently, annotations are only available within sequences, but they should be available in FASTA format, or any of the other ascii text formats (EMBL/Swissprot, Genbank, PIR/GCG). If annotations are present in a library and the annotation characters includes '*', then the -V '*' option MUST be used. However, special characters other than '*' are ignored, so annotations of '@', '%', or '@' should be transparent. In translated sequence comparisons, annotations are only available for the protein sequence. The format for encoded annotations has changed to support annotations in both the query and library sequence. If the -m 9c flag is provided and annotations are present, then an annotated position in the alignment will be encoded as: '|'q-pos':'l-pos':'q-symbol'l-symbol':'match-symbol'q-residue'l-residue' For example: |7:7:@@:=YY|14:14:##:=TT In cases where the query or library sequence does not have an annotation, then the q-symbol or l-symbol will be 'X' (which is not a valid annotion symbol). >>Jan. 25, 2008 fa35_03_04 Map 'O' (pyrrolysine) to 'K', 'U' (seleno-cysteine) to 'C' in uascii.h ('J' is already recognized and mapped to the average of 'I' and 'L'). Thus, 'J' will appear in alignments, but 'O' and 'U' are transformed to 'K' and 'C'. Because "Oo" and "Uo" are not (currently) part of aax[] ("Uu" is in ntx[]), apam.c/build_xascii() was extended to add characters from othx[] - "oth" for "other" so that they are not lost. Double check, and fix, some mappings for 'J/j' and 'Z/z'. >>Jan. 11, 2008 fa35_03_03 Clean up some issues with -m 10 output; put "; mp_Algorithm", "; mp_Parameters" down with other -m 10 ";" lines. Also provide "; al_code" and "; al_code_ann" if -m 9c is specified. Remove duplicate ">>>query" line. Add "; aln_code" and "; ann_code" to -m 10 -m 9c output. The alignment/annotation encoding is only produced once (in showbest(), and is then saved for -m 10 aligment. >>Dec. 13, 2007 fa35_03_02m (merge of fa35_03_02 and fa35_02_08_br) Add ability to search a subset of a library using a file name and a list of accession/gi numbers. This version introduces a new filetype, 10, which consists of a first line with a target filename, format, and accession number format-type, and optionally the accession number format in the database, followed by a list of accession numbers. For example: gi|1170095|sp|P46419|GSTM1_DERPT Glutathione S-transferase (GST class-mu) The offset is 4 and the termination character is '|'. For databases distributed in FASTA format from the European Bioinformatics Institute, the offset depends on the name of the database, e.g. >SW:104K_THEAN Q4U9M9 104 kDa microneme/rhoptry antigen precursor (p104). and the delimiter is ' ' (space, the default). Accession formats 1 and 3 expect strings; accession formats 2 and 4 work with integers (e.g. gi numbers). >>Dec. 12, 2007 fa35_02_08 Correct bug in ssearch35 gapped scores that only occurred in non-accelerated code. This bug has been present since fa35_02_06. Modified the Makefiles so that accelerated (ssearch35(_t)) and non-accelerated (ssearch35s(_t)) are available. Edited Makefile's to provide accelerated ssearch35 more specifically. Modifications to provide information about annotated residues in the -m9c coded output. Previously, -m 9c output added a field: =26+9=15-2=9-1=3+1=74-2=3-3=63 after the standard -m 9 output information. With the new version, an annotated query sequence ( -V '*#' ) adds the field: |14:16:#TA|44:37:*>ST|71:66:#=TT which indicates that residue 14 in the query sequence aligns with residue 16 in the target (library) with annotation symbol '#', the alignment score is '<' less than zero, and the residues are 'T' (query) and 'M' (library). (The '|' is used to separate each annotation entry.) >>Nov. 10, 2007 Parts of p2_complib.c and p2_workcomp.c, and the pvm/mpi Makefiles, have been updated to be consistent with name changes in the param.h and structs.h directories. >>Nov. 20, 2007 fa35_02_08 Parts of p2_complib.c and p2_workcomp.c, and the pvm/mpi Makefiles, have been updated to be consistent with name changes in the param.h and structs.h directories. >>Nov. 6, 2007 fa35_02_07 Correct problems with asymmetric RNA matrices in initfa.c and rna.mat. >>Oct. 18, 2007 Correct problem parsing ASN1 FastaDefLines when the database is local. Recovering from a misplaced cvs commit of code that was supposed to be on a branch, code has been recovered from earlier versions (fa35_02_05 because fa35_02_06 has some branch contamination). >>Oct. 4, 2007 fa35_02_06 Correct error in gap penalties in dropnnw.c. Due to an unfortunate inconsistency, the gap parameter in FLOCAL_ALIGN (in dropgsw2.c) had a different meaning than that in almost all the other programs (it was the sum of gap_open and gap_ext). The FLOCAL_ALIGN function call was copied for FGLOBAL_ALIGN, even though the the FGLOBAL_ALIGN function used the more conventional gap_open, gap_ext parameters. Thus, FGLOBAL_ALIGN was wrong and the subsequent do_walign() in dropnnw.c were wrong. dropgsw2.c:FLOCAL_ALIGN has been modified to use the conventional gap_open parameter, and calls to dropnnw.c: FGLOBAL_ALIGN() and do_walign() have been fixed. >>Sept. 20, 2007 Modify the logic used when saving a seq_record *seq_p into beststr *bbp to ensure that if the seq_record is replaced, it is replaced at all the places where it is referenced. This involves adding a linked list into beststr (*bbp->bbp_link). When making the link (and freeing it up), be certain that the linked seq_p is the same as the one being replaced. >>Sept. 18, 2007 fa35_02_05 A relatively obscure problem was found on the SGI platform when searching a library smaller than 500 sequences (thus requiring some shuffles). Two bugs were found and corrected; one involved not allocating aa1shuff with COMP_THR and not do a m_file_p->ranliba() before re_getlib(). The second involved destroying a pointer to the list of seq_records when a sequence was being shuffled. The bugs were confirmed with Insure, and have been fixed. >>Sept. 7, 2007 fa35_02_04 Revamp the offset handling code to provide better uniformity between query and library offsets and coordinate systems. Fix a problem with load_mmap() to load 64-bit sequence locations properly on machines with 32-bit integers. >>Sept. 4, 2007 Modify ncbl2_mlib.c slightly to check to see whether the amino-acid mapping in blast databases is identical to the FASTA mapping (it should be). If they are identical, do not re-map the blast amino acid sequences (potentially a small speed up). >>Aug. 22, 2007 Change ps_lav.c to lav2ps.c, and add lav2svg.c. It is now possible to generate a lalign35 HTML output that has both SVG (lav2svg) and PNG (lav2ps | gs ), graphics. >>Aug. 10, 2007 CVS fa35_02_03 Fix faatran.c:aacmap() bug. >>Aug. 6, 2007 Extensive restructuring of pssm_asn_subs.c to parse PSSM:2 ASN.1's downloaded from NCBI WWW PSI-BLAST more robustly. >>July 25, 2007 CVS fa35_02_02 Change default gap penalties for OPTIMA5 matrix to -20/-2 from -24/-4. >>July 24, 2007 Correct bugs introduced by adding 'J' - 'J' was initially put before 'X' and '*' in the alphabet, which led to problems because the one-dimensional lower-triangular pam[] matrices (abl50[], abl62[], etc) had entries for 'X', and '*', but not for 'J'. By placing 'J' after the other characters, the problem is resolved. Modify tatstats.c to accommodate 'J'. '*' is back in the aascii[] matrix, so that it is present by default (like fasta34). >>July 23, 2007 Changes to support sub-sequence ranges for "library" sequences - necessary for fully functional prss (ssearch35) and lalign35. For all programs, it is now possible to specify a subset of both the query and the library, e.g. lalign35 -q mchu.aa:1-74 mchu.aa:75-148 Note, however, that the subset range applied to the library will be applied to every sequence in the library - not just the first - and that the same subset range is applied to each sequence. This probably makes sense only if the library contains a single sequence (this is also true for the query file). Correct bugs in the functions that produce lav output from lalign35 -m 11 to properly report the begin and end coordinates of both sequences. Previously, coordinates always began with "1". Correct associated bug in ps_lav.c that assumed coordinates started with "1". >>June 29, 2007 CVS fa35_02_01 Merge of HEAD with fasta35 branch. >>June 29, 2007 CVS fa35_01_06 Add exit(0); to ps_lav.c for 0 return code. >>June 26, 2007 Add amino-acid 'J' for 'I' or 'L'. Add Mueller and Vingron (2000) J. Comp. Biol. 7:761-776 VT160 matrix, "-s VT160", and OPTIMA_5 (Kann et al. (2000) Proteins 41:498-503). Changes to dropnnw.c documentation functions to remove #ifdef's from strncpy() - which apparently is a macro in some versions of gcc. >>June 7, 2007 Modify initfa.c to allow ggssearch35(_t), glsearch35(_t) to use PSSMs. >>June 5, 2007 CVS fa35_01_05 Modifications to p2_complib.c, p2_workcomp.c to support Intel C compiler. Fixed bug in p2_workcomp.c - gstring[2][MAX_STR] required - [MAX_SSTR] too short. mp35comp* programs now tested and working (as are pv35comp*, c35.work* programs). Fix problem with fasts/fastm/fastf last_tat.c with limited memory. Correct problem with lalign35.exe Makefile.nm_[fp]com. Add $(CFLAGS) to map_db to enable large file support. Address problem with PSSM's when '*' not defined (initfa.c:extend_pssm()). >>May 30, 2007 CVS fa35_01_04 Complete work on ps_lav, which converts an lalign35 lav (-m 11) file into a postscript plot, which looks identical to the plots produced by plalign from fasta2. (ps_lav has been replaced by lav2ps and lav2svg). >>May 25,29, 2007 Changes to defs.h, doinit.c mshowalign.c for -m 11, which produces lav output only for lalign35. Changes to comp_lib2.c to add m_msg.std_output, which provides all the standard print lines. This is turned off for -m 11 (lav) output. lalign35 -m 11 provides standard lav output, with the addition of #lalign35 -q ... . >>May 18, 2007 Add m_msg.zsflag to preserve pst.zsflag when reset by global/global exclusion of many library sequences. >>May 9, 2007 CVS fa35_01_03 Tested local database size determination with p2_complib2/p2_workcomp2. >>May 2, 2007 renamed fasta35, pv35comp, etc Separate thread buffer structures from param.h. Problems with incorrect alignments has been fixed by re-initializing the best_seqs and lib_buf2_list.buf2 structures after each query sequence. The labels on the alignment scores are much more informative (and more diverse). In the past, alignment scores looked like: >>gi|121716|sp|P10649|GSTM1_MOUSE Glutathione S-transfer (218 aa) s-w opt: 1497 Z-score: 1857.5 bits: 350.8 E(): 8.3e-97 Smith-Waterman score: 1497; 100.0% identity (100.0% similar) in 218 aa overlap (1-218:1-218) ^^^^^^^^^^^^^^ where the highlighted text was either: "Smith-Waterman" or "banded Smith-Waterman". In fact, scores were calculated in other ways, including global/local for fasts and fastf. With the addition of ggsearch35, glsearch35, and lalign35, there are many more ways to calculate alignments: "Smith-Waterman" (ssearch and protein fasta), "banded Smith-Waterman" (DNA fasta), "Waterman-Eggert", "trans. Smith-Waterman", "global/local", "trans. global/local", "global/global (N-W)". The last option is a global global alignment, but with the affine gap penalties used in the Smith-Waterman algorithm. >>April 24, 2007 The new program structure has been migrated to the PVM and MPI versions. In addition, the new global algorithms (pv35compgg, pv35compgl) have been moved, though the the PVM/MPI versions do not (yet) to the appropriate size filtering. >>April 19, 2007 Two new programs, ggsearch35(_t) and glsearch35_t are now available. ggsearch35(_t) calculates an alignment score that is global in the query and global in the library; glsearch35_t calculates an alignment that is global in the query and local, while local in the library sequence. The latter program is designed for global alignments to domains. Both programs assume that scores are normally distributed. This appears to be an excellent approximation for ggsearch35 scores, but the distribution is somewhat skewed for global/local (glsearch) scores. ggsearch35(_t) only compares the query to library sequences that are beween 80% and 125% of the length of the query; glsearch limits comparisons to library sequences that are longer than 80% of the query. Initial results suggest that there is relatively little length dependence of scores over this range (scores go down dramatically outside these ranges). A bug was found and fixed in showalign() and showbest() where the aa1save buffer was not preserved when some sequences needed to be re-read, while others were stored in the beststr. >>April 9, 2007 Some of the drop*.c functions have been reconfigured to reduce the amount of duplicate code. For example, dropgsw.c, dropnsw.c, and dropnfa.c all used exactly the same code to produce global alignments (NW_ALIGN() and nw_align()), this code is now in wm_align.c. Likewise, those same files, as well as dropgw2.c, use identical code to produce consensus alignments (calcons(), calcons_a(), calc_id(), calc_code()). Rather than working with three or four copies of identical code, there is now one version. >>March 29, 2007 At last, the lalign (SIM) algorithm has been moved from FASTA21 to FASTA35. Currently, only lalign35 is available. A plotting version will be available shortly (or perhaps a more general solution that produces lav output). The statistical estimates for lalign35 should be much more accurate than those from the earlier lalign, because lambda and K are estimated from shuffles. Many functions have been modified to reduce the number of times structures are passed as arguments, rather than pointers. >>February 23, 2007 The threading strategy has been modified slightly to separate the end of the search phase (and a complete reading of all results buffers) from the termination phase. This will allow future threading of subsequent phases, including the Smith-Waterman alignments in showbest() and showalign() (though care will be required to ensure that the results are presented in the correct order). >>February 20, 2007 fasta-34_27_0 (released as fasta-35_1) The FASTA programs have been restructured to reduce the differences between the threaded and unthreaded versions (and ultimately the parallel versions) and to make more efficient use of modern large memory systems. This is the beginning of a move towards a more robust shuffling strategy when searching databases with modest numbers of related sequences. The major changes: comp_lib.c -> comp_lib2.c - comp_lib.c will be removed work_thr.c -> work_thr2.c - work_thr.c will be removed mshowbest.c, mshowalign.c have been modified to remove aa1 as an argument. They must allocate that space if they need it. The system is set up to allocate a substantial amount of library sequence memory, either to a single buffer (unthreaded) or to the threaded buffer pool. For smaller databases, the library sequences are read once, and then subsequently read from memory (this could be extended for RANLIB(bline) as well). Soon, these changes will allow the program to re-read the beststr[] sequences and shuffle them to produce accurate lambda/K estimates. ================================================================ See readme.v34t0 for earlier changes. ================================================================ fasta36-36.3.8i_14-Nov-2020/doc/readme.v36000066400000000000000000003147011433453312700172350ustar00rootroot00000000000000 Version 3.6 of the FASTA programs is a significant update over version 3.5. It uses the same underlying structure as FASTA35 (specifically the strategies for ensuring accurate statistics), but it allows for multiple high-scoring alignments to be shown, rather than just one. This is the main functional difference between FASTA and BLAST - BLAST could show multiple HSPs, FASTA did not. >>Nov 12, 2022 [released as v36.3.8i Nov, 2022] [scripts/ann_pfam*] Changes made to address the shutdown of the Pfam web site. ann_pfam_www.pl now points to pfam-legacy.xfam.org, but this site goes away in Jan, 2023. A new script, ann_pfam_www.py goes to Interpro to get pfam information, but this script does not do clan-mapping, because clan information is not yet available (or I do not know how to get it). In addition, ann_pfam_sql.py is available, which largely replaces ann_pfam_sql.pl. >>Nov 14, 2022 [defs.h, initfa.c, mshowbest.c] Add option 'r' to -m8CB to display raw optimal score in BLAST tabular output, e.g "-m8Cr" or "-m8CBlr". >>Nov 7, 2022 [doinit.c/initenv()] Check string size for query and library file names, and abort if they are too long. (Also increase max query file name from 120 to 512.) [compacc2e.c/build_lib_db()] replace mktemp() with mkstemp() to remove error warnings. [scripts/get_protein.py] update for rest.uniprot.org, use urllib.request rather than requests [make/Makefile*] remove -o from HFLAGS to show linking commands more clearly. remove NFLAGS, which were not being used. >>July 13, 2022 [cal_cons2.c] Modify add_annot_code.c to NOT add a code for 'V' annotations, because, if the 'V' annotation is used, it is annotated by compacc2e.c:comment_var(). Without this change, things happened twice. >>Sept 7, 2021 [faatran.c] Enable translation table -t 9 for Echinoderms. This bug has existed since alternate translation tables were first made available. >>May 18, 2021 [mshowalign2.c] Correct problem with -m 10 z-scores, bit-score, and E()-value for a secondary alignment. [doinit.c, initfa.c, mshowalign2.c, mshowbest.c] Add an option, -Xg, that preserves the gi|12345 string the score summary and alignment output. >>Dec 17, 2020 [scripts/ann_*.pl] check for annotation file vs accession more directly. >>Nov 23, 2020 [released as v36.3.8i Nov, 2020] [src/smith_waterman_sse2.c,src/global_sse2.c, src/glocal_sse2.c, simde/*] The *_sse2.c Smith-Waterman and global/glocal_sse2 files have been modified to use the SIMDE definitions (simd-everywhere, https://github.com/simd-everywhere/simde/blob/master/simde/x86/sse2.h), which should enable efficient vectorized comparison on ARM/NEON and other architectures. New Makefiles (make/Makefile.linux[32|64]_simde_arm) are available and have been tested on the RaspberryPi4 platform, with appropriate vectorized speedup. A Makefile for the Apple M1 ARM chip is available (make/Makefile.os_x_arm64) but has not been tested. Likewise, some version of these files should work on the Amazon Graviton architecture. Many thanks to Michael R. Crusoe (https://orcid.org/0000-0002-2961-9670) for the SIMDE code converstion, and to Evan Nemerson for creating SIMDe. >>June 18, 2020 [src/nmgetlib.c] Modify the code that reads FASTA format files to allow '#' in the first position of a line to be treated as a comment, just as '^;' has been treated in the past. This should allow the FASTA programs to read the HUGO Proteomics Standards Initiative (PSI) PSI Extended FASTA Format (PEFF) files (http://www.psidev.info/peff). >>June 2, 2020 [src/scaleswn.c] Modify line describing query in -R .res file. Add line to report ave_n1, sample_fract, zs_off in -R .res file. Add line to report properties of library to -R .res file. >>May 19, 2020 [src/doinit.c, src/defs.h, src/mshowbest.c] Add 's' option and 'd' options to -m8CB. -m8CBs displays both percent identity and percent similarity. -m8CBd adds the raw domain information field provided by -m8CBL. The options after -m8CB: 'l/L','s', and 'd' can be specified in any order. >>May 1, 2020 [src/comp_lib9.c] Correct bug where library sequence and residue count was not reset when large memory mapped databases were searched that did not fit into memory. [src/*.c] changes to reduce compile warnings with gcc8 and gcc9, and to regularize ***ERROR and ***Warning messages set to stderr. >>Feb. 10, 2020 [src/*_sse2.* files] change to open source copyright for Michael Farrar SSE2 code. See COPYRIGHT.sse2 [scripts/ann_pfam_www.pl] Fix Getopt::Long misspelling. >>Nov. 12, 2019 [src/compacc2e.c] Only display query feature annotations, not query domain coordinates. >>Nov. 11, 2019 [scripts/expand_up_isoforms.pl] Add exit(4), which should be recognized by complib2e.c/build_link_data(), to recognize that no link-data will be found. This should reduce error messages dramatically. [scripts/expand_refseq_isoforms.pl] Equivalent of expand_up_isoforms.pl for RefSeq sequences. Both programs require appropriate SQL tables. >>Sept. 10, 2019 [scripts/*.py, psisearch2/*.py] Converted to python3. >>Aug. 9, 2019 [src/ncbl2_mlib.c, ncbl2_head.h] Modest extensions made to support reading makeblastdb format v5 databases. Changes have only been made to read the db.pin file, but things work in simple tests. >July 16, 2019 [src/comp_lib9.c] Fixed a memory leak problem when searching with large libraries that could be memory mapped (libraries with .xin index files). If the library did not fit in memory, then the program kept allocating new memory. By default, the largest database that fits in memory must be less than 16 GB. Larger libraries will be re-read, which slows down multi-query searches considerably. To increase the size of the library allowed in memory, use the option: "-X M32G" to fit 32 GB libraries. >>Mar. 8, 2019 [src/initfa.c,faatran.c,dropfx2.c] Modify translation table 1 to allow selenocysteine translation (TGA->'U'), and modify scoring matrices to give positive scores to '*':'U'. The translation modification ONLY works with "-t 1". In addition, BLAST BTOP alignments (-m 8CB) convert a 'U' aligned with a '*' to a '*', so the end of the alignment is '**' rather than 'U*' (fastx36) or '*U' (tfastx36). dropfx2.c (fastx36/tfastx36), dropfz3.c(fasty36/tfasty36) did not properly switch protein and translated DNA codes with -m 8CB -- fixed. version date updated to Mar, 2019 >>Feb. 26, 2019 [scripts/get_genome_seq.py] added get_genome_seq.py as a replacement for get_hg38_bed.py, remove get_hg38_bed.py. 'get_genome_seq.py --genome mm10' also produces sequences from mouse mm10 (and can now do any genome that bedtools can read). >>Feb. 23, 2019 [src/comp_lib9.c, mshowbest.c] Modify repeat_thresh so that poor alignment scores (E() > ppst->e_cut_r, typically -E-threshold/10.0) do not look for additional alignments. >>Feb. 21, 2019 [src/nmgetaa.c, scaleswn.c, scripts/get_protein.py, get_hg38_bed.py] Modify nmgetaa.c to ignore ':'s (for sequence subsets) in scripts. The script can do the subsetting. Modify scripts/get_protein.py to provide subsetting. Add scripts/get_hg38_bed.py to extract fasta sequences using the format "chr2:123456-543210" Modify scaleswn.c to estimate Altshul-Gish parameters when gap and extension do not match exactly. >>Feb. 6, 2019 [src/compacc2e.c, nmgetaa.c] modify build_link_data() to allow '+' for space in scripts. Ensure that lib_type is properly initialized (open_lib.c()). >>Jan. 23, 2019 [nmgetaa.c] Fix bug introduced when checking for lib_type. >>Jan. 15, 2019 [src/upam.h, altlib.h, nmgetaa.c] [scripts/rename_exons.py, map_exons_coords.py, get_uniprot.py, get_refseq.py, get_proteins.py] Bug fixes: The VT10, VT20, etc scoring matrices did not have scores for '*:*' alignments, used with FASTX/TFASTX for extending alignments through the termination codon. As a result, searchs with '-t t' did not extend through the termination codon, even though they should have. This has been fixed. Enhancements: FASTA can now download both query and library sequences using a script, by specifying file type 9. Thus: fasta36 "../scripts/get_uniprot.py+P09488 9" /seqlib/swissprot.fasta Will run the script "get_uniprot.py" with the argument "P09488" and use the output of the script as the query sequence. In this example, the library type (9) is specified by the " 9" (this space cannot be replaced with a '+' character). Alternatively, library type '9' can be specified by putting a '!' before the script file name. fasta36 \!../scripts/get_uniprot.py+P09488 /seqlib/swissprot.fasta Scripts can be used to produce query or library sequences, or both. Three scripts that download sequences from the NCBI and Uniprot have been added in the "scripts" directory: "get_uniprot.py" takes Uniprot accessions as arguments, "get_refseq.py" takes refseq accessions (protein or mRNA), and "get_protein.py" gets both Uniprot and RefSeq protein sequences. rename_exons.py and map_exons_coords.py can take annotated BTOP alignments with genome coordinates and map exons to the alternative genome. >>Jan. 2, 2019 [src/mshowbest.c] Fix problems with site annotation when dom_info is provided with -m8CBL [scripts/ann_exons_up_sql.pl, ann_exons_up_www.pl] Make scripts more robust to missing chromosome information, reverse-strand coordinates. >>Dec. 11, 2018 [scripts/ann_exons_up_www.pl, ann_exons_up_sql.pl] Add the option "--gen_coord" to report exon start ('<') and end ('>') genome coordinates features of exons. >>Nov. 14, 2018 [scripts/rename_exons.py, relabel_domains.py, compacc2e.c] Two new scripts, rename_exons.py and relabel_domains.py, that take a blast tabular output file with domain alignment annotations (and possibly raw domain information) and modifies the names (rename_exons.py) or colors (relabel_domains.py). rename_exons.py takes the exon numbering associated with the query sequence and maps it onto the subject alignments. relabel_domains.py can be used to use different color numbers for homologous and non-homologous domains. Both of these programs modify blast tabular output files, which can then be merged back into an alignment display using merge_blastp_annot.pl or merge_fasta_annot.pl. compacc2.c:build_link_data() has been modified to convert '+' in the script string to ' ', to allow passing command line options. A space in the script string is used to separate the script from the library type of the file returned by the script. >>Nov. 6-7, 2018 [doinit.c, mshowbest.c, mshowalign2.c, defs.h, structs.h] (a) Add options to provide query and subject sequence lengths and raw domain coordinates in BLASTP tabular output with the options -m 8CBl and -m 8CBL. If domain annotations are available, -m 8CBL also provides the raw domain coordinates (not just those included in the alignment) in the form |DX:1-100;C=PF12345|XD:1-100;C=PF12345 where |DX a query annotation and |XD indicates a subject annotation. -m 8CBl (lower-case L) shows the sequence lengths, but not the raw domain info. (b) parse the annotation program strings so that '+' are converted to ' '. This greatly simplifies passing arguments to the annotation scripts. Thus: -V \!ann_pfam_sql.pl --db=pfam31 --neg --vdoms can be written as: -V \!ann_pfam_sql.pl+--db=pfam31+--neg+--vdoms (likewise for -V q\!ann_pfam...) (c) provide an option to remove region/feature annotations from non-m8 (blast-tabular) output. This simplifies the process of using scripts/merge_fasta_btab.pl to use .bl_tab (-m 8CBL) files to inject sub-alignment scores and domain information. >>Nov. 1, 2018 [doinit.c] Allow -m F#=file.name in addition to -m "F# file.name" to address problems I had with spaces in shell scripts. >>Oct. 23, 2018 [re-released as fasta-36.3.8g] (see README_v36.3.8g.md) [make/Makefiles*,psisearch2/m89_btop_msa2.pl] Add options to psisearch2/m89_btop_msa2.pl to provide clustalw header (--clustal), require a minimum coverage of the query sequence (--min_align 0.8), and edit sequence identifiers to remove database and accession (--trunc_acc). Remove -lz dependency from non-debug Makefiles. >>Aug. 5, 2018 [re-released as fasta-36.3.8g] [lib_sel.c] Make lib_select.c more robust to missing indirect name files. [scripts/ann*.pl] update various annotation scripts to use https:// instead of http:// >>April 3, 2018 [initfa.c, comp_lib.c, dropfx2.c] Changes to (a) ensure that the "-t t" option correctly inserts and aligns a termination codon '*'. (a) changes to -m 8CB, -m8CC, and -m9C so that aligned termination codons are indicated as "**" (-m8CB) or "*1" (-m8CC, -m9C). >>Mar. 9, 2018 [scripts/annot_blast_btop2.pl, merge_blast_btab.pl, blastp_annot_cmd.sh] Code is now in place to provide sub-alignment scoring using domain annotations with blastp searches (BLOSUM62 only). blastp_annot_cmd.sh runs blast and produces both a standard HTML and a tabular output file. It then runs annot_blast_btop2.pl to add sub-alignment scoring to the tabular ouput file, and then merge_blast_btab.pl merges the domain-annotated blast tabular file with the HTML output file. When combined in this way, the FASTA web server (fasta.bioch.virginia.edu) can produce blastp searches with domain highlights/scoring. >>Feb. 6, 2018 [initfa.c, doinit.c, mshowbest.c, mshowalign2.c] Add a new extended option, -XB, which causes percent identity, percent similarity, and alignment length to be presented using the BLAST model, which does not count gaps in the alignment length. >>Dec. 30, 2017 [released as fasta-36.3.8g] [scaleswn.c] Replace np_to_z() with np1_to_z(), which does not substract low probability from 1.0, thus allowing accurate z-values for very low probabilities. >>Sept. 26, 2017 [comp_lib9.c, compacc2e.c] Previously, if the query sequence was all lower-case letters (seg-ed) and the '-S' option specified, the search would effectively be done with a zero-length sequence, which broke the statistics. The code has been modified to convert all lower-case queries to upper-case when -S is used. [scaleswn.c] Fixed problem with scaleswn.c/ag_stats() not setting parameters properly when matrix was unknown. >>May 23, 2017 [released as fasta-36.3.8f] [url_subs.c] A small, but major change in the output available to the $SRCH_URL and $SRCH_URL2 strings, which are used to enable re-searching, and now pairwise alignment. (It would be better to provide a json string of the information, rather than using fprintf().) An additional value, the name of the query sequence, is provided to these urls so that pairwise alignment becomes possible. >>May 23, 2017 [scripts/ann_feats2ipr.pl,ann_feats_up_www2.pl,test_ann_scripts.sh src/defs.h] Changes to ensure that EBI format databases, which place the ID before the accession, e.g. SP:GSTM1_HUMAN P09488, can be processed properly by annotation scripts. This involved displaying more of the description line, so that the accession field is included, in the annot_XXXXX file. >>May 8, 2017 [compacc2e.c] Address problem where initial domain annotation similarity score/identity not properly reset. [scripts/annot_blast_btop2.pl] Fix various problems with domain scores, particularly in gaps, and domain coordinates. Modify version string to May, 2017 >>April 18, 2017 [cal_cons2.c] Address problem where identity count not correctly assigned to N-terminal domain at the end of a domain. >>April 14, 2017 [src/compacc2e.c, scripts/ann_exons_up_www.pl] Provide a new script to annotate exon positions in Uniprot Proteins (scripts/ann_exons_up_www.pl) that uses the EBI proteins/api/coordinate service. Provide additional error checking on annotates to ensure that domain start is always <= domain end. >>Jan 17, 2017 [scripts/ann_pfam30_tmptbl.pl] ann_pfam30_tmptbl.pl is a modification of ann_pfam30.pl that loads a temporary tables of accessions to be annotated, rather than asking for one sequence at a time. >>Dec 14, 2016 [initfa.c/scaleswn.c] Change required shuffle count (down to 100) and introduce an median/IQR strategy to robustly estimate mean and S.D. for ggsearch (normal) comparisons (-z 3, in place of Altschul-Gish statistics). Modify version string to Dec., 2016. >>Nov 18, 2016 [build_ares.c] fix sequence encoding memory leak >>Sept 30, 2016 [released as fasta-36.3.8e] [psisearch2/] Added a new sub-directory, psisearch2/, which includes scripts and documentation for the new iterative psisearch2_msa.pl and psisearch2_msa.py programs. These programs perform iterative PSIBLAST (or SSEARCH) searches, but with an option (--query_seed) that dramatically reduces false-positives. Modified most of the scripts/ann_*.pl files to work with new NCBI Swissprot accession format. Modified scripts/ann_feats_up_www2.pl and scripts/ann_upfeats_pfam_e.pl to work with JSON format Uniprot descriptions. >>July 28, 2016 [src/pssm_asn_subs.c] Fix another problem with binary ASN.1 file processing where the asnp->abp buffer was not refilled in time. >>July 12, 2016 [src/mshowbest.c] Modified -m8/-m 8CB output to include "eval2" when a second E()-value is available (when -z > 20). "eval2" is shown after the bit score, but before BTOP and annotations. >>May 25, 2016 [scripts/ann_pfam28.pl] Implement --split_over command option, which takes overlapping domains and produces virtual like domains from the overlap region. >>Apr. 12, 2016 [released as fasta-36.3.8d] [src/pssm_asn_subs.c] Fix another problem with binary ASN.1 file processing where the asnp->abp buffer was not refilled in time. [initfa.c] - version date updated to Apr, 2016 [upam.h] - changes to default gap penalties for VT40 (from -14/-2 to -13/-1), VT80 (from -14/-2 to -11/-1), and VT120 (from -10/-1 to 11/-1). >>Mar. 30, 2016 [scripts/m9B_btop_msa.pl] Provide --bound_file_only, --bound_file_in, --bound_file_out. Ensure that alignments outside boundaries are NOT included in MSA. >>Mar. 22, 2016 [scripts/m8_btop_msa.pl, m9B_btop_msa.pl] Ensure that full length query sequence is included in MSA. [pssm_asn_subs.c] Fixes to allow IUPACAA sequences in ASN.1 PSSM. Other fixes to ensure that arrays not allocated are not freed when wfreqs2d[] is not available. >>Mar. 18, 2016 [scripts/m8_btop_msa.pl, m9B_btop_msa.pl] scripts/m8_btop_msa.pl takes a fasta36 -m 8CB output file and produces a multiple sequence alignment that can be used with psi-blast. scripts/m9B_btop_msa.pl takes a fasta36 -m 9B output file and produces a multiple sequence alignment that can be used with psi-blast. >>Feb. 15, 2016 [mshowbest.c, compacc2e.c, cal_cons2.c, dropfx2.c, dropfz3.c] Modify logic for calculating percent identity in sub-alignments to use the BLASTP strategy, which does not could gapped regions as part of the alignment length. Fix the -m 8 display (BLAST tabular output) to use ungapped alignment length for percent identity (as -m BB does). [initfa.c] - version date updated to Feb, 2016 >>Feb. 12, 2016 [compacc2e.c, cal_cons2.c, dropfx2.c, dropfz3.c] Modify display_push_features() to use both the rst.score[score_ix], which is used to calculate the zscore and bitscore, and also sw_score, which is the correct divisor for sub-alignment scores. Previously, only the rst.score[score_ix] was used, which caused some bit scores to be out of range, and produced erroneous Q-value scores for sub-alignments. >>Jan. 24, 2016 [cal_cons2.c] Ensure left_domain_link[01] set to NULL before initialized. Rename ann_feats2l.pl to ann_feats_up_sql.pl for consistency with ann_feats_up_www2.pl. ann_feats_up_www2.pl no longer works because of changes at the EBI. >>Dec. 15, 2015 [re-released as fasta-36.3.8c] [pssm_asn_subs.c] Fixed another problem parsing ASN.1 because of reading past the end of the buffer. [cal_cons2.c] Fix a serious bug that prevented display of annotated sites using -m9c/-m8CC >>Nov. 24, 2015 [re-released as fasta-36.3.8c] [mshowalign2.c] Correct first_line logic to display >>seqid description on first alignment line, but >- on remaining lines. >>Nov. 23, 2015 [released as fasta-36.3.8c] [cal_cons2.c, mshowalign2.c, scripts/annot_blast_btop.pl, scripts/ann*_e.pl] Fix the problem that lalign36 no longer displayed the library/subject accession/description. Correct some problems introduced with BTOP alignment encoding. A new script, scripts/annot_blast_btop.pl, is available to provide -V type sub-alignment scoring to BLASTP BTOP alignments stored in tabular files. In addition, the scripts/ann*.pl scripts were modified to work as part of a unix pipe, and the ann*_e.pl scripts replace the older non "_e.pl" scripts, and were renamed with out the "_e" (thus, ann_pfam_www.pl was removed, and ann_pfam_www_e.pl was renamed ann_pfam_www.pl). >>Nov. 6, 2015 [cal_cons2.c, initfa.c, mshowbest.c, dropfx2.c, dropfz3.c] Implement BLAST+ BTOP alignment format, available with -m 8CB or -m 9B. Convert previously static calc_code alignment strings to dynamic strings. >>Oct. 13, 2015 [released as fasta-36.3.8b] [initfa.c, pssm_asn_subs.c] Fix problems encountered when reading in binary ASN.1 file produced by datatool. Previous versions did not use the final score data provided by the tool; this version now uses that information if it is available. If it is not available, the PSSM integer values are calculated from the frequency data. >>Oct. 8, 2015 [pssm_asn_subs.c] Fix a rare condition where the pssm_asn parser reads past the asn buffer. >>Sep. 28, 2015 [comp_lib9.c, scaleswn.c, dropnfa.c, dropfx2.c dropfz3.c] (1) [scaleswn.c] -- changes to drop back to Altschul-Gish statistics when other strategies fail. (2) Fix to ensure that adler32() is calculated correctly for 1-residue library sequences; definition of adler32() added to drop*.c files. >>Sep. 7, 2015 [Makefile.nmk_icl, Makefile.nm_pcomp, doinit.c, readme.win32] Automatic detection of thread/core number on windows. Changes to readme.w32 documentation, Windows programs no longer require sse2 in name (since all modern x86 processors have it). >>Sep. 4, 2015 [comp_lib9.c, cal_cons2.c, dropfx2.c, dropfz3.c] (1) Fix bug with overlapping domains when a domain ends exactly where the alignment starts. (2) provide command line in -m 8CC output with -DPGM_DOC >>Aug. 31, 2015 [git v36.3.8_30Jul15] [cal_cons2.c, dropfx2.c, dropfz3.c, mshowbest.c, build_ares.c, doinit.c, comp_lib9.c] Modifications to enhance the independence of annotation output to different files. Earlier, annotations could not be properly output to different files in different formats. For example, -m 9c prevented -m "F8CC output.m8CC" -m "F9I ouutput.m9I". Annotation output formats are now more independent. They are not fully independent, however. Thus, if CIGAR format is used for one output, it will be used in all other alignment encoding outputs. >>Aug. 21, 2015 [cal_cons.c, dropfx2.c, dropfz3.c, mshowbest.c, build_ares.c, doinit.c] Add -m 9I to -m 9i. -m 9i reports identity and variation (based on annotation scripts). -m 9I also reports domain content on the initial summary line. >>Aug. 20, 2015 [fasta-36.3.8a] [mshowalign2.c] Fixed bug in lalign36 E()-value, bit score calculations for highest scoring non-identical alignment by reverting to older code. This bug was introduced in fasta-36.3.6d in January, 2014. >>Jul. 21, 2015 [fasta-36.3.8] [compacc2e.c, cal_cons2.c, dropfx2.c dropfz3.c, param.h] Fixed a major bug in the annotation code that had been added to accomodate overlapping domains. The original implementation was not thread-safe, because the array of annotations was modified during the scoring, but was also shared by threads. The new version keeps independent scoring arrays. >>Jun. 23, 2015 [released as fasta-36.3.7b] [dropnnw2.c] Fix problem where glsearch reset (ignored) the -M sequence limit. >>Jun. 18, 2015 [dropfx.c, dropgsw.c, dropfx.c, dropfx2.c, dropfz3.c] Fix problem in do_walign.c with comparison to score_thresh during recursive alignment. >>May. 21, 2015 [compacc2e.c] Add additional checks to ensure that annotations are within the sequence boundaries. >>Jan. 26, 2015 [ re-released as fasta-36.3.7a] [compacc2e.c] Fix problem with domain boundary calculations for subsets of sequences. >>Jan. 21, 2015 [ released as fasta-36.3.7a] [calc_cons2.c, dropfx2.c, dropfy3.c] Fix problems with -m 9c / -m 9C alignment encodings in version 36.3.7. Apparently, the Nov. 25, 2014 fix was not committed properly. In addition, make certain that the query sequence is ALWAYS the reference sequence, particularly in translated alignments. As a result, the insertion/deletion codes are now reversed for fast[xy]36 and tfast[xy]36. >>Jan. 6, 2014 [data/VTML_*.mat] Provided scoring matrix files for the VTML_10,20,40,80,120,160,200 matrices available internally. >>Nov. 25, 2014 [ released as fasta-36.3.7] [cal_cons.c, dropfx2.c, dropfz3.c] Fix problem that prevented -m 9c and -m 8CC unless annotations were present. Added approved copyright notice and Apache 2.0 license to appropriate files. >>Nov. 19, 2014 [mshowbest.c] Add alignment (CIGAR) string and annotation string to BLAST tabular (-m 8) aligments with -m 8C[cCdD]. To get alignment and annotation encoding without BLAST comments, use -m 8X[cCdD]. >>Nov. 10, 2014 [cal_cons2.c, dropfx2.c, dropfz3.c] Ensure that site annotations are shown when annotations are embedded in a sequence, not provided by a script. >>Oct. 27, 2014 [cal_cons2.c] Fix a bug in the annotation alignment that put annotation symbols off by one (or more) in the coordinate lines. Add annotations that align in gaps. >>Oct. 6, 2014 [most source files] The copyright notice for fasta-36.3.7 has been updated to include an open software license, Apache2.0, for redistribution. >>Sept. 28, 2014 [url_subs.c] Substitute annot_p->s_annot_arr_p[] for annot_p->domain_arr_p[i] in display_domains(), encode_json_str(). Remove domain_arr_p from struct annot_entry. With domain_arr_p gone, n_domains is less useful, but it is still available, and used for checking for domain graphics. encode_json_domains() also now uses annot_p->n_annots, and skips over non-domains. >>Sept. 19, 2014 [dropfx2.c, dropfz3.c] Fixes to produce correct coordinates with forward and reverse complement [t]fast[x,y]. >>Sept. 17, 2014 [new version, fasta-36.3.7] [compacc2e.c, cal_cons2.c, dropfx2.c, dropfz3.c] The annotation domain scoring/plotting strategy has been extended to allow overlapping domains. To accommodate overlapping domain annotations, the annotation file format (e.g. gstm1_human.annot) has been extended to accept the form: >sp|P09388|GSTM1_HUMAN 1 - 88 Glutathione_S-Trfase_N :1 7 V F Mutagen: Reduces catalytic activity 100- fold. 90 - 208 Glutathione-S-Trfase_C-like :2 108 V Q Mutagen: Reduces catalytic activity by half. where a "-" in the second field indicates that the first and third fields specify the beginning and end of the domain. In previous versions, a '[' specified the beginning of a domain, and a ']' on a later line specified the end of the domain. '[' and ']' on separate lines required that domains not overlap (so that the '[' and ']' could be paired). fasta-36.3.7 will still read this format, but the "start - stop" format is both simpler and more flexible. Three new annotation scripts are available that use the new domain notation: ann_feats2ipr_e.pl, ann_feats_up_www2_e.pl, ann_pfam_e.pl, and ann_pfam_www_e.pl. All four scripts will report overlapping domains. Overlapping domains also allows domain annotations from different sources to be combined (e.g. InterPro Pfam, Panther, and Superfamily domain annotations), as well as domain annotations of different types, e.g. Uniprot domain and secondary structure annotations. >>Aug. 28, 2014 [re-released as fasta-36.3.6f] [ncbl2_mlib.c] The code used to parse blastfmtdb sequence description lines has not kept up with NCBI's use of ASN.1 in sequence descriptions. This code has been updated, and now works properly with the protein and DNA sequence databases. [comp_lib9.c] Fixed a seg-fault that occurred when an open-file error occurred. >>Aug. 22, 2014 [released as fasta-36.3.6f] [mshowbest.c] Change alignment summary display for lalign to not show identical alignment score unless '-J' option used. Add "The best non-identical alignments" when no "-J" [ann_pfam_www.pl] Fix bugs. [ncbl2_mlib.c] modified to read NCBI ambiguity codes in blastdbfmt/formatdb nucleotide databases. Not extensively tested.` >>Aug. 20, 2014 [compacc2.c, cal_cons.c, dropfx.c, dropfz2.c] Modify sub-alignment score report to calculate bit-score by dividing total alignment bit score by sub-alignment raw score divided by total alignment raw score. This produces a bit score that is much more sensible than the previous strategy, which calculated a z-score from the sub-alignment. >>Aug. 18, 2014 [compacc2.c, cal_cons.c] Undo removal of '[]' from aa0a/aa1a (they are required to visualize domain boundaries in alignment). cal_cons.c now users PSSMs when they are available. >>Aug. 8, 2014 [comp_lib9.c, compacc2.c] Move the call to get query annotations via scripts out of compacc2.c and into comp_lib9.c. >>July 29,2014 [comp_lib9.c, mshowbest.c, mshowalign2.c] Enable high scoring alignment display (like high scoring sequences) with lalign36, when -m 9 (-m 9c/d/C/D) option is provided, or with -m 8. This allows lalign36 to provide a compact, tabular list of non-overlapping local alignments. >>June 30, 2014 [pssm_asn_subs.c] Update the code for parsing ASN.1 binary PSSM files produced by psiblast+. The new code reads more of the optional fields in pssm_intermediate_data(). The fields are not used, but broke the earlier parser. >>June 11, 2014 [cal_cons.c, initfa.c, dropfx.c, dropfz2.c] Extend the match/mismatch encoding provided by -m 9c and -m 9C with -m 9d and -m 9D. The -m 9d/D options provide mismatch locations as well as insertion/deletion locations. For -m 9d, the list of codes has expanded from '=\/*' to '=\/*x'; for -m 9D, 'MDIMX'. Current implementation works for all programs except [t]fast[fms]. Updated version strings to June, 2014. >>May 28, 2014 [mshowalign2.c, mshowbest.c, initfa.c, structs.h] Add the command line option -XI. Changes the calculation of percent identity to ensure that a single mismatch in a long sequence with > 99.9\% identity is displayed as 99.9% (0.999) identity, rather than 100.0% identity. Without this option, a single mismatch in 10,000 residues displays 100% identity, with the option, 99.9% identity is displayed (even though the identity is 99.99%). [cal_consf.c] Fix the false error message "code begins with 0" in cal_consf.c. >>Feb. 12, 2014 [compacc2.c] When providing "sequence length" to annotation scripts, add offsets. Also modify scripts to allow sequence lengths to increase. >>Jan. 28, 2014 (re-released as fasta-36.3.6d/Jan 2014) [dropfs2.c, calconsf.c, tatstats.c] The coordinate fix for fasts36/fastm36 (Dec 18, 2013) broke some fasts/fastm alignments. The alignment code has been reverted to the "classic" code that has been used for more than 10 years. However, that code always marked the first aligned residue as 1, even when the first part of the query did not align. The initial coordinate offset has been fixed; the coordinate is now the position in the first aligned fragment. This may be confusing, because with fasts, the first aligned fragment may not be the first fragment in the query list. The coordinate provided always provides the offset from the beginning of the first fragment in the alignment, not the first fragment in the list. This fix required changes to the definition of calc_astruct(), which required changes to build_ares.c, mshowalign.c, calc_cons.c, dropfx.c, and dropfz2.c. >>Jan. 24, 2014 [mshowalign2.c] Add checks to assumption that '>gi|12345' is an NCBI library entry. [nmgetlib.c] Fix for nmgetlib.c with -DMYSQL_DB Some cleanup of old Makefiles. >>Jan. 1, 2014 [url_subs.c] Fix off by one in domain coordinates in display_domains(). >>Dec. 18, 2013 [dropfs2.c, cal_consf.c] Fix problem with alignment display when query sequence is much longer than library sequence. >>Dec. 11, 2013 [compacc2.c] Modified save_best2() to correctly exclude sequences outside -M n1_low-n1_high limits. >>Nov. 8, 2013 (re-released as fasta-36.3.6d) [ncbl2_mlib.c] Fix problem with src_long8_read() where int/uint64_t seems to cause problems with Linux intel icc. Using int/unsigned int solves the problem. >>Nov. 1, 2013 [apam.c, ncbl2_mlib.c, map_db.c] [apam.c ] Fix problem with query sequences and libraries that do not end in newline ('\n'). [ncbl2_mlib.c, map_db.c] provide grouping for shifts for byte extraction in src_int4/long8_read() to remove compiler warnings. [map_db.c] Fix problem reading sequences for indexing that caused crash. >>Oct. 8, 2013 (released as fasta-36.3.6d) [comp_lib9.c, initfa.c] Modify initfa.c/re_ascii() function to avoid qascii[] characters that had been remapped for annotations. >>Oct. 4, 2013 [nmgetlib.c, ncbl2_mlib.c] Modify nmgetlib.c/re_openlib() to re-use memory mapped file arrays. This had been the intention for some time, but a check for libf != 0 prevented the memory mapped arrays from being reused. libf is no longer checked, just mm_flag. >>Sep. 26, 2013 [ncbl2_mlib.c] Fix a bug in ncbl2_mlib.c/parse_fastadl_asn() that prevented accessions longer than 20 characters in description lines from BLAST formatted libraries. [compacc2.c] Fix a bug in compacc2.c/comment_var() that showed the wrong original sequence in qVariant changes. >>Sep. 2, 2013 [dropfs2.c] Fix bug in dropfs2.c/init_work() that prevents correct tatusov statistics with -z >10. >>Aug. 21, 2013 (released as fasta-36.3.6c) [comp_lib9.c] Fix bug in comp_lib9.c/new_seqr_chain() that prevented memory from being allocated to the chain if a memory mapped database was followed by a non-memory mapped database. >>Aug. 9, 2013 [scaleswn.c] Ensure shift to MLE_STATS if too many scores are excluded by trimming. >>July 31, 2013 (released as fasta-36.3.6b) [url_subs.c] Make JSON output for -m 6 (html) dependent on $ENV{JSON_HTML}. JSON output is not currently used. >>July 26, 2013 [mshowalign2.c, scripts/lavplt_svg.pl] Correct offsets in -m 11 lav plots, and modify lav2plt.pl/ lavplt_svg.pl/ lavplt_ps.pl to reflect the corrections. Move all perl scripts out of /src into /scripts. >>July 19, 2013 (released as fasta-36.3.6a) [compacc2.c, cal_cons.c, dropfx.c, dropfz2.c, build_ares.c] Provide dynamic string allocation/dyn_strcat for annotation string output. This fixes problems with long proteins with many domains or other annotations, which were too long for the fixed annotation output storage. Version date updated to July, 2013. Compiled and tested on Windows32. >>July 8, 2013 [cal_cons.c, dropfx.c, dropfz2.c] Properly terminate annotions with offsets [cal_cons.c], and with domains beyond alignment [dropfx.c, dropfz2.c] >>July 5, 2013 (released as fasta-36.3.6) [comp_lib9.c, doinit.c, dropfx.c, dropfz2.c] Fix conflict between -m 9 and -z -1; fix annotation display using non-script annotations. Stop using calc_last_set in dropfx/fz2.c. >>June 24, 2013 [scripts/ann_feats_up_www2.pl] Add script (ann_feats_up_www2.pl) for annotating UniProt sequences using: "http://www.ebi.ac.uk/Tools/dbfetch/dbfetch/uniprotkb". >>June 6, 2013 [compacc2.c, cal_cons.c, initfa.c, dropfx.c, dropfz2.c] Provide the -XNS/-XXS/-XN+/XX+ and -XND/-XXD/-XN-/-XX- options that specify how N:N and X:X alignments are counted for similarity and identity. By default, N:N (DNA) and X:X (protein) alignments are considered identical, but not similar (because their scores are typically negative to address statistical issues). -XNS/-XXS/-XN+/-XX+ cause N:N/X:X alignments to be counted as similar, even though their alignment are negative. Likewise, -XND/-XXD/-XN-/-XX- cause N:N and X:X alignments to be considered non-identical (and non-similar). >>May 28, 2013 [url_subs.c] do_url1() has been modified to: (1) require env($REF_URL, $SRCH_URL, $SRCH_URL1) for these links to produce printout. (2) Link text is surrounded by . (3) do_url1() now produces output automatically, which can be used to get all the information provided by earlier URL links. >>May 29, 2013 [mshowalign2.c] Re-instate code in showalign() to ensure that original bbp->rst is used for first alignment, rather than that calculated by CHECK_SCORE (which is used for later sub-HSP's). The CHECK_SCORE -S alignment score is based on the non-S alignment, and is then re-scored with the low-complexity -S matrix. But the best alignment excluding low-complexity can have a higher score than the best all-complexity alignment rescored with -S. >>May 27, 2013 [mshowalign2.c, url_subs.c] The plot_domain.cgi SVG code has been expanded to allow the domain structure of the entire query and library sequence, not just the aligned regions, to be displayed. Showing domains above the query or below the library takes an additional 18 px in each direction (36 total); this size needs to be provided in the format string that is provided in $DOMAIN_PLOT_URL. Right now, the argument to $DOMAIN_PLOT_URL can get very long with lots of aligned domain (region), and query and library domain information. It would be better to provide this in some separate way. YAML might also be a more efficient strategy. >>May 9, 2013 [dropfx.c, dropfz2.c, compacc2.c, url_subs.c] The web infrastructure for domain plots has been completed -- plot_domain2.cgi which generates SVG for domain plots now understands reverse-complement cDNA fastx/y alignments, and plots coordinates accordingly. Testing with fastx36/fasty36 revealed some memory errors, which have been fixed. In addition, dropfz2.c has been updated to properly treat some region/alignment-boundary conditions; dropfx.c and dropfz2.c provide equivalent sub-alignment scores. [../scripts, ../misc] A new directory, ./scripts, has been created to collect the scripts used for sequence library expansion and domain/feature annotation. ../scripts/README.scripts provides more information. Modify code to allow expansion scripts (-e) to start with '\!', like annotation scripts. >>Apr. 15, 2013 (compacc2.c, cal_cons.c, dropfx.c, dropfz2.c, mshowalign2.c) Modifications to properly deal with sequence and coordinate offsets in annotation alignments. compacc2.c/get_annot_list() has been modified to only print/read an annotation once (the same sequence may appear twice with fastx/fasty). mshowalign2.c now includes and in HTML mode. This comments are not on their own line, to save output space, so the remainder of the line should be captured. >>Apr. 5, 2013 (doinit.c) Add the ability to specify HTML output using the -m '0H' option. This addresses the problem that -m "F6" does not fully specify the output format. In addition, -m 6 should probably explicitly set -m 0 (if it has not been set), rather than simply 'or'ing it, but right now we do not know when it is set. >>Mar. 17, 2013 (compacc2.c, url_subs.c, plot_domain.cgi, ann_feats2l.pl) Modifications to url_subs.c to support SVG domain maps in HTML output. A new evironment variable has been defined, DOMAIN_PLOT_URL, which can be used to plot (using SVG or PNG) a map of the domains on the library sequence. The argument to DOMAIN_PLOT_URL is the concatenated list of annotations provided by the -V options. All annotations (including sites) are passed; non-alpha-numeric characters are URL encoded. plot_domain.cgi is an example of a script that can be passed as DOMAIN_PLOT_URL. To use this script: $ENV{DOMAIN_PLOT_URL}="\n"; ann_feats2l.pl has been extended to allow the --neg (or --neg-dom) option, which puts domain a NODOM domain annotation between the domain annotations provided by the database. >>Mar. 7, 2013 (cal_cons.c) Modify update code to properly begin global alignments that start with insertions or deletions. >>Feb. 20, 2013 (compacc2.c) Annotation scripts (-V \!ann_feats.pl) were being inactivated if no annotations were returned, fixed. >>Feb. 2, 2013 (comp_lib9.c) Prevent premature termination of query title in -m 9 mode (guarantees the full >accession text to first space is preserved). (compacc2.c) Provide domain information (;C=PF00016) in -m9 domain scoring. >>Jan 7-9, 2013 (initfa.c, pssm_asn_subs.c) Modify pssm_asn_subs.c to properly parse binary PssmWithParameters produced by NCBI asntool from psiblast (blast+) text ASN.1 output. The text ASN.1 uses a binary encoded query sequence; get_lambda() in initfa.c was modified to work with a binary encoded query sequence (the query is used to find the p_i from rrcounts[query[i]]). Modify pssm_asn_subs.c to set query=NULL when PSSM does not include query sequence. Modify read_asn_pssm() to set query=aa0 if query==NULL; >>Dec. 14, 2012 (cal_cons.c, dropfx.c, dropfz2.c) Enable percent identity calculation on domains. Merge cal_cons.c/calc_code() strategies into dropfx.c, dropfz2.c >>Dec. 6, 2012 (comp_lib8.c, comp_lib9.c, nmgetlib.c) Fix code in close_lib_list() that did not properly re-initialize files for re-reading (not seen when library is in memory, or for single sequence search). >>Dec 2, 2012 (wm_align.c, Makefiles) CHECK_SCORE() in wm_align.c must return different scores for local and global (#define GGSEARCH in wm_align.c). Requires modified Makefiles. >>Sep 24, 2012 (doinit.c, compacc2.c, cal_cons.c) Fix bugs introduced with next_annot_entry() strategy for reallocating annot_arr[]; find a bug in cal_cons.c where i1_annot was indexing annot0_arr_p[]; ensure that m_msg.ann_arr_def[] is appropriately initialized. >>Sep 17, 2012 (lav2plt.pl, lavplt_ps.pl, lavplt_svg.pl, lav_defs.pl, l_feat_dom.pl) Convert the lav*.c programs to perl. This simplifies adding the ability to script domain annotation. The format for domain annotations for the lav2plt.pl programs differs slightly from the current up_feats_dom.pl program, because it requires a beginning and end for each domain, e.g.: >sp|Q14247.2|SRC8_HUMAN 80 [] 116 Cortactin 1. 117 [] 153 Cortactin 2. 154 [] 190 Cortactin 3. 191 [] 227 Cortactin 4. 228 [] 264 Cortactin 5. 265 [] 301 Cortactin 6. 302 [] 324 Cort. 7; trunc. 492 [] 550 SH3. and takes a single accession from the command line, e.g.: "l_annot_dom.pl sp|P09488" rather than reading a file. >>Sep 4, 2012 (doinit.c, compacc2.c, fasta_guide.tex) Annotations can now be provided within a sequence (-V '%#!'), by a script (-V '\!up_feats.pl'), or from a file (-V '>Aug 31, 2012 (cal_cons.c, compacc2.c, dropfx.c, dropfz2.c) The region score calculations have been corrected to include regions that overlap alignment boundaries, and regions that start in gaps. >>Aug 10, 2012 (cal_cons.c, compacc2.c, dropfx.c, dropfz2.c) Introduce a second kind of annotation feature, the "Region" (denoted by '[' and ']'), that specifies a region that should be scored separately. These regions cannot be nested, each residue can belong to only one region. However, the scores in these regions can be calculated (perhaps percent identity and length later), and are displayed: >>sp|P09488|gstm1_human GLUTATHIONE S-TRANSFERASE MU 1 ( (218 aa) Site:* : 23Y=23Y : MOD_RES: Phosphotyrosine (By similarity). Site:* : 33Y=33Y : MOD_RES: Phosphotyrosine (By similarity). Site:* : 34T=34T : MOD_RES: Phosphothreonine (By similarity). Region : 3-82 : score=547; bits=146.4 : GST_N Site:^ : 116Y=116Y : BINDING: Substrate. Region : 104-171 : score=465; bits=125.8 : GST_C All information about the region should be provided with the '[' (start) symbol. >>Aug 1, 2012 (dropfx.c, dropfz2.c, c_dispn.c) Fix some very old bugs that caused errors in coordinate displays of reverse-complement fastx/fasty alignments. Fix BLAST alignment display coordinates. Enable variant calculations for FASTY (dropfz2.c), and simplify calculations for dropfx.c >>Jul 29,2012 (doinit.c, compacc2.c, comp_lib9.c) Allow annotation descriptions to be delivered by annotation script, denoted by '=' in first line, e.g.: =*:phosphorylation =^:binding site =@:active site >gi|121735|sp|P09488.3|GSTM1_HUMAN 7 V F Mutagen: Reduces catalytic activity 100- fold. 23 * - MOD_RES: Phosphotyrosine (By similarity). 33 * - MOD_RES: Phosphotyrosine (By similarity). 34 * - MOD_RES: Phosphothreonine (By similarity). remove requirement for leading space before annotation script: e.g.: -V '\!up_feats_c.pl' >>Jul 27, 2012 (compacc2.c, cal_cons.c, dropfx.c) (1) Allow comments/descriptions on features other than type 'V' (variant) to be displayed with alignment. If a '@' SITE feature has a comment provided by the annotation script, the comment will be displayed in the alignment description , e.g.: >>sp|P28161.2|GSTM2_HUMAN Glutathione S-transf (218 aa) ^ :116Y=116Y: BINDING: Substrate (By similarity). @ :210S+210T: SITE: Important for substrate specificity. initn: 632 init1: 632 opt: 632 Z-score: 1414.3 bits: 268.8 E(450603): 2.6e-71 Smith-Waterman score: 945; 75.2% identity (93.6% similar) in 218 aa overlap (1-218:1-218) If no comment is provided, the annotation will only appear in the coordinate line. This provides a way to show annotation locations in BLAST output. (2) Also add code to ensure that symbols returned by annotation scripts are displayed on the coordinate line. (3) Add environment variable substitution to =${TMP_D}/annot.defs and \!${TMP_D}/up_feats_c.pl parsing. >>Jul 24, 2012 (uascii.h, map_db.c) Modify NANN, a value one more than the largest amino-acid encoding value, increasing it from 50 (too small for NCBIStdaa_ext_n) to 60; ESS changed to 59. >>Jul 20, 2012 (mshowalign2.c, mshowbest.c, compacc2.c, comp_lib8.c) (transferred from fasta-36.3.5) (a) Fix bug in mshowalign2.c that occurred because of re-use of the "tmp_len" variable when adding '\n' to -L long descriptions. This typically occurred with -m 10. (b) Modify logic used to capture if an alignment had been calculated, reducing dramatically the number of re-alignments with multiple -m "F" output files. >>Jun 30, 2012 (mshowbest.c) Ensure that opt score and E()-value are based on initial scan score, not later alignment score. score_delta is used to increment initial scan score. However, currently the E()-value of the alignment score is displayed in the alignment list, so the -m 9 and showalign() E()-values can be inconsistent. >>Jun 29, 2012 (from fasta-36.3.5c) (pssm_asn_subs.c) Add chk_asn_buf() before getting RPSPARAMS_MATRIX. >>Jun. 27, 2012 (from fasta-36.3.5c)) (nmgetlib.c, compacc2.c) Fix bug that allocated unnecessary space for re-loading sequences in pre_load_best() (compacc2.c). Ensure that closed/NULL memory mapped file descriptors are not returned. >>Jun. 18, 2012 (compacc2.c) Modify pre_load_best() to allocate memory for sequences to be aligned only if the sequences are not already in memory. (Searches against hg18 with repetitive queries caused very large amounts of memory to be allocated in duplicate.) >>Jun. 12, 2012 (compacc2.c, doinit.c, dropfx.c, cal_consf.c) Implement variant scoring for fastx36. Also address problems with annotation location when -m markx is not set. Check function definitions for other drop functions where variant scoring is not yet implemented. >>Jun. 9, 2012 (defs.h, doinit.c, c_dispn.c) Add 'M' and 'B' options to -m 0,1 to specify annotation location. For example, -m 0M (-m1) causes the annotation to be inserted in the "middle" alignment line, rather than in the coordinate line (making the sequence with the annotated feature ambiguous). -m 0B, -m1B puts the annotation in both the middle (alignment) line and the coordinate line. >>Jun. 8, 2012 (doinit.c, compacc2.c, build_ares.c, mshowbest.c, mshowalign2.c, structs.h and others) Implement a script-driven strategy for feature annotation in alignments. In addition to: fasta36 -V '*%^@', which extracts the annotation characters from the library sequences, we can also do: fasta36 -V '*%^@ \!feature_script.pl' which expects the same annotation characters ('*%^@'), but expects them from the script 'feature_script.pl'. This script gets the sequence description line, e.g: "gi|121746|sp|P09211|GSTP1_HUMAN Glutathione S-transferase P (GST class-pi) (GSTP1-1)", and is expected to return a tab-delimited file: ==== pos label value 23 * 33 * 34 * 116 ^ 173 V N 210 V T ==== Currently, the "value" is ignored unless the label is "V", for variant. If 'V' annotations are present, then the alternative amino-acid residue values are tested in alignments; if the variant residue improves the score, the score is updated and the variant sequence is displayed, and a 'V' indicates the variant in the coordinate line. Currently, variant annotations can only affect library sequences. By default, annotation symbols are shown in the coordinate line for -m 0 (default) and -m 1 (difference) alignments, sometimes overwriting the coordinate. Annotation symbols (from either sequence) can be shown in the middle alignment line by specifying -m 0M or -m 1M, or in both the middle alignment line and the coordinate line with -m 0B, -m 1B. >>May 5, 2012 (dropnnw2.c) Enable rev-comp for ggsearch/glsearch. >>Mar. 13, 2012 (defs.h) Increase default file name length to 256 from 120 to accommodate long file names at the EBI. Also allow much longer command line arguments argv_line[MAX_LSTR=4096] to be reported. >>Jan. 30, 2012 (nmgetlib.c, altlib.h) Read .fastq sequence libraries (ignoring quality information) as library type '7'; >>Dec. 21, 2011 (released as fasta-36.3.5c) (nmgetlib.c) Fixed a problem reading multiple library files that produced segmentation faults because a data buffer was free()ed and then re-used. >>Nov. 17, 2011 (initfa.c, mshowalign.c) (from fasta-36.3.5b) Fix problem with ppst->e_cut_r for LALIGN DNA sequences (set improperly to 0.001). Add ':' to s_bits: in -m 10 output. Also remove "score" from "lsw_s-w opt" score description (not present in non-LALIGN -m 10). >>Nov. 9, 2011 (from fasta-36.3.5b) (lavplt_svn.c, lavplt_ps.c, ncbl2_mlib.c) Fix buffer overrun for lav legend. Fix old problem re-opening NCBI blastdbfmt indirect OID files. >>Oct. 30, 2011 (comp_lib9.c) Correct re-initialization bug that prevented the second query sequence from seeing the entire library. [from fasta-36.3.5a_svn] (comp_lib9.c, comp_lib8.c, ncbl2_mlib.c, nmgetlib.c) Address out-of-memory problems when searching memory mapped, and fix problem using fopen()/fread() rather mmap for NCBI DNA databases. On 32-bit machines, NCBI database files cannot be left open, and are now more agressively closed. However, searches that produce very large numbers of alignments may still run out of memory on low-memory 32-bit machines. (compacc2.c, comp_lib8.c, comp_lib9.c, htime.c) Correct problems that produce negative scan times. >>Oct. 21, 2011 (pcomp_subs2.c, work_thr2.c, mshowalign2.c, make/Makefile.mp_com2, Makefile.fcom) Fixes to re-enable MPI compilation and execution. >>Oct. 18, 2011 (compacc2.c, mshowbest.c, comp_lib8.c, comp_lib9.c, initfa.c) Fix the logic for specifying the number of alignments displayed with the -b 123, -b '>123', -b '=123', -b '$' options, particularly when statistics are not used. >>September 21, 2011 (initfa.c, apam.c, scaleswn.c compacc2.c) Two major problems have been addressed (which also affect fasta-36.3.5 and earlier versions): (a) specifying a -s dna.mat DNA matrix did not work properly; (b) too few shuffles, particularly with DNA sequences, were produced with pairwise comparisons. The problem with scoring matrix files was exacerbated by the use of fixed library alphabets. initfa.c has been modified to recognize that when a DNA scoring matrix is specified, the "-n" option is set. The shuffling problem appeared when, for pairwise DNA comparisons, fewer than 50 shuffles were reported. This occurred because the buffers used to communicate with threads no longer have a fixed amount of sequence buffer associated with them. >>August 23, 2011 (tatstats.c, upam.h, apam.c) The remapping of the amino-acid encoding to NCBIstdaa broke some assumptions in tatstats.c, and elsewhere. In addition to the simple mapping problem, which changed the counts[] assignment in tatstats.c/calc_priors(), the fact that NCBIstdaa does not have contiguous real amino acids (e.g. B is at position 2), broke the generate_tatprobs() function because of a very old bug where priorptr was not always incremented. Some of the drop*.c functions have been updated to ensure that the space allocated for rapid pam[][] score lookup includes space for lower-case characters, which can be present in pseg'ed "map_db -b" libraries. In addition, binary format (currently all mmap'ed) libraries cannot include annotations, because common annotation values ('*', '&') overlap the range of the NCBIstdaa_l (lowercase) mapping. >>August 1, 2011 (map_db.c) map_db.c has been modified to provide a more efficient memory mapping for FASTA format files. map_db -b works like map_db, but, in addition to writing the .xin index file of descriptions and sequences in the FASTA library, it also produces a new protein_library.bsq file and protein_library.xin_b that contains binary encodings of the databases and an index for this file. The binary encoding can be memory mapped, so that database searches can proceed directly from memory. map_db -b .bsq files are very similar to the blastfmtdb files, except that they accomodate lower-case letters (masked) in the sequences. The implementation of blastfmtdb lower-case masking prevents it from being used in directly memory mapped files. map_db.c introduces a new memory mapped format encoding, MP2. I expect this format to be extended to allow not only directly memory mapped files, but also directly memory mapped lookup tables. A database can be hashed, and the hash and link files written to a library file, which can then be used for searches without the need to re-calculate the hash/link tables. (comp_lib9.c, mmgetaa.c, ncbl2_mlib.c, initfa.c, dropfz.c) Modifications to allow memory mapped files to be read and processed directly. Databases with lower-case characters can be memory mapped, which means that lower-case characters are coming into the alignment programs even when -S is not specified. As a result, all the protein scoring matrices must be built-out to allow lower-case characters. Likewise, the dropfz2.c matrices built by init_weights() must always be set for lower-case characters. >>July 20, 2011 (mshowbest.c, mshowalign2.c) gi|12345 numbers are no longer shown in the list of best hits unless -m 8 or -m 9 are used. They are never shown in the alignments. (dropfz2.c) Modify MAX_UC, MAX_LC to be consistent with NCBIstdaa alphabet. Modify <= nsq for init_weights(). >>July 16, 2011 fasta-36.3.6 (comp_lib9.c, drop*.c, cal_cons*.c) The internal encoding of amino-acids has changed to NCBIstdaa throughout the programs. This allows the programs to use memory mapped NCBI blastdbfmt libraries directly, without re-encoding, but lower-case low-complexity mapping is not recognized. This allows substantial speedup in single query searching. However, to allow low-complexity searches, a new memory mapped format/encoding will be required. >>July 5, 2011 fasta-36.3.6 (compacc2.c) Modify save_best2() logic for identifying scores to be used for statistics. An is_valid_stat is set for multi-frame results that specify which scores can be used for the stats[] and qstats[] arrays. Modifications to buf_do_work(), buf_shuf_work(), and buf_qshuf_work() to cause the calculation to be done in the thread, rather than the main program. Fix some bugs in the qshuffle code to ensure that all valid shuffles up to maxshuff are saved. (complib5e.c, complib7e.c, complib8.c) Fix -m 9c/C core dump with -z -1. (cal_cons.c, cal_consf.c) Reverse 'I', 'D' with CIGAR string. >>June 26, 2011 (comp_lib8.c, compacc2.c) Added the ability to search a library produced/specified by a script. Like the "-e expand_script.sh", searching against a library that begins with a '!', e.g. '!library_script.sh', causes the library_script.sh to be executed, producing a temporary file from stdout, which is then scanned as the database. As with expansion files, all the standard library syntax can be included. Thus, if cat_db.sh contains the command 'echo /seqdb/swissprot.lseg', the command: fasta36 query.aa '\!@cat_db.sh' will cause cat_db.sh to produce a temporary file with the line "swissprot.lseg"; the temporary file will be interpreted as an indirect file of filenames; and swissprot.lseg will be searched. Note that in Unix systems, the '!' must be preceeded by a '\' as shown above, so that it is not interpreted by the shell. >>June 23,24 2011 (compacc2.c, comp_lib8.c, mysql_lib.c) A new save_best2() function in compacc2.c has been designed to simplify the logic involved in saving best scores, with the goal of moving some of the save_best() calculations into individual threads. mysql_lib.c has a new command, close_tables, that allows a script to remove a table after it has been used. (It might make more sense to add this to the extension script option.) >>June 14, 2011 (released as fasta-36.3.5a June, 2011) (comp_lib7e.c, comp_lib8.c, compacc2.c) Fix a serious bug in next_sequence_p() that caused a portion of the library to be missed when long sequences filled the sequence buffer before the slots were filled. Make certain that thread buffers are cleared when running an expansion script. Return an extra '\n' before the final summary for consistency with earlier versions. >>June 2, 2011 (released as fasta-36.3.5 June, 2011) (comp_lib8.c, comp_lib5e.c, comp_lib7e.c) Fix a bug that indicated that linked expanded sequences were pre-loaded for alignment when they were not. >>May 24, 2011 (released as fasta-36.3.5) (comp_lib8.c, comp_lib7e.c, comp_lib5e.c, mshowalign2.c, compacc2.c, initfa.c, param.h, scaleswn.c) The in-memory versions of the program are allocating much more memory than they actually use, causing the memory limits to cut in too soon. Fix this by using a smaller MAXLIB_P (36000) for searches against protein libraries, and expanding/contracting the aa1b_size more sensibly. Also add lost_memK value to track lost memory. For protein searches, lost memory is now around 15% of allocated memory (down from 40%). Numerous fixes to improve formatting of HTML output. Full statistics parameters are now available with the fdata output. Add fset_vars() to comp_lib8.c to set m_msg.max_memK properly. Parameters have been modified to ensure less memory waste (all buffers have 1000 sequences); Drop default 64-bit library memory limit to 8GB (-XM8G, LIB_MEMK=8G). >>May 25, 2011 (comp_lib8.c, comp_lib7e.c, comp_lib5e.c, mshowbest.c) Add the '-b >1' option, guarantees that at least 1 result is shown, but otherwise limits by E()-value. '-b =10' guarantees to show exactly 10 results (never more or less if the library is large enough), '-b 10' will show no more than 10 results, limited by -E e_cut, and '-b >1' will show at least 1 result, but is otherwise limited by -E e_cut. >>May 19, 2011 (comp_lib8.c, compacc2.c, param.h) comp_lib8.c is a version of comp_lib7e.c that keeps sequences in memory over multiple searches, but returns seqr_chains of buffers of sequences as they are read, rather than waiting for everything to be read. comp_lib8.c will automatically allocate up to 2 GB (32-bit machines) or 8 GB (64-bit machines) to hold the sequence database in a multiple query search. This number can be increased or decreased using the -XM# (megabytes) or -XM#G (gigabytes) option, or by setting the LIB_MEMK environment variable. -XM4G (LIB_MEMK=4G) makes 4GB available for sequence libraries; -XM-1 makes all machine memory available. >>May 5 2011 (mshowbest.c) Fix problems that prevented "-b align_number" properly limit output with "-z -1". "-z -1" also broke multiple HSPs (since no threshold could be calculated); fixed. (dropnfa.c) Fix some offset arithmetic that prevented FASTA alignments from extending to full length in do_walign(). >>May 4, 2011 (scaleswn.c) Provide additional checks for division by low numbers in fit_llen2() and fit_llens(). The similarities between fit_llen(), fit_llens(), and fit_llen2() have been highlighted, and their differences documented. scaleswn.c now provides pstat_info, which writes all the values required to re-calculate zscores or E()-values from raw scores. >>May 2, 2011 (dropnfa.c) Fix a problem with the traditional cgap(join)/optcut(opt) thresholds (no longer used by default) caused by allowing ktup=3 for proteins. The ktup=3 modification increased the cgap/opt thresholds by 6. (comp_lib5e.c, comp_lib7e.c, comp_lib8.c) Confirm identity of -m # and -m "F3 file.out". Small differences fixed. (mshowbest.c, mshowalign2.c) Remove gi|12345 information from -m B, -m BB blast-like output. NCBI Blast does not display gi numbers. >>Apr. 22, 2011 (doinit.c, initfa.c) Several of the less common options have been changed to expanded options, changing the meaning of -X (which now specifies expanded options), as well as -o, -1, -B, -x, and -y. -o now provides the offset coordinates previously specified with -X; -B is now -XB, -o -Xo, -x -Xx1,-1, and -y -Xy, e.g. -Xy32. >>Apr. 19, 2011 (comp_lib7e.c, comp_lib5e.c, doinit.c, mshowbest.c) Test lastest version with -I interactive mode. Modificiations required to ensure that aligments goto outfd, not stdout, when filename is entered. In addition, in interactive mode there can be more scores shown than e_cut, so bbp->repeat_thresh must be set in showbest() not main() program. >>Apr. 17, 2011 (comp_lib7e.c, doinit.c, compacc.c) The FASTA programs now support multiple output files with different -m out_fmt types using the -m "F# out_file" or -m "F#,#,# out_file" option. Normally, the -m out_fmt option applies to the default output file, which is either stdout, or specified with -O out_file (or within the program in interactive mode). With -m F, an output format can be associated with a separate output file, which will contain a complete FASTA program output. Thus, ssearch36 -m 9c -m "FBB blast.out_file" -m "F10 m10.out_file" query library Will sent the -m 9c output to stdout, but will also send -m BB output to blast.out_file, and -m 10 output to m10.out_file. Consistent -m out_fmt comands can be set to the same file by separating them with ','; e.g.: ssearch36 -m 9c -m "F9c,10 m9c_10.out_file" query library. Producing alternative format alignments in different files has little additional computational cost. One of the shortcomings of this approach is that it affects only the output format, not the other options that modify the amount of output. Thus, if you specify -E 0.001; that expect threshold will be used for all the output files. When a -m option can modify the output (e.g. -m 8 sets -d 0), that modification persists only for that file. >>Apr. 14, 2011 (initfa.c) Fix bugs in e_cut_r calculation that made it much too low for lalign36, and used the >1.0 divisor improperly for all programs (change from e_cut_r = e_cut_r/divisor to e_cut_r = e_cut/divisor). >>Apr. 11, 2011 (comp_lib5e.c, comp_lib7e.c, compacc.c) The non-preload version of FASTA (comp_lib5.c) has been extended to allow script expansion (comp_lib5e.c). To do this, the central score calculation loops have been moved to getlib_buf_work(), just as seqr_chain_work() was created for comp_lib7e.c. Moreover, the function used to build the link_file names is build_link_data() is now in compacc.c. Differences between comp_lib5e.c and comp_lib7e.c have been reduced. >>Apr. 5, 2011 (comp_lib7e.c) Fix issue with closing unopened link_lib_list_p when no results are found. Remove no-sequence error message for link library file. >>Apr. 1, 2011 (comp_lib7e.c) The -e script.sh has been generalized to have all the capabilities of a library file, in particular '@' specifies an indirect file, and "script.sh #" allows a library type to be specified. Thus, the script.sh invoked by "@script.sh" should not produce a fasta file; it should produce a file that contains the name of a fasta file (or possibly some other format). If '@' is used, the link_lib file written to stdout will be prepended with '@', and treated as an indirect file of file names. (comp_lib5.c, comp_lib7.c, comp_lib7e.c) Fix problem with null refstr (no Please cite:). >>Mar. 31, 2011 (comp_lib7.c, comp_lib7e.c) close_lib() was being called after each query. This is incorrect for versions (like comp_lib7) that keep the entire database in memory; the files must be kept open to allow ranlib() to get long descriptions (alternatively, a long description could be read initially). (comp_lib5.c, comp_lib7.c, comp_lib7e.c) Fix query offset coordinates for long queries that are broken up. Allow query library to have zero-length sequences without stopping (queries now stop when end-of-file is reached). (upam.h) Fix gap penalties for BLOSUM80 matrix (change from -14, -2 to -10, -2). >>Mar. 29, 2011 (comp_lib7e.c, doinit.c) Add the ability to search an expanded set of sequences based on the accessions from the initial search using "-e expand.sh" option. If "-e expand_script.sh" is specified, the command: expand.sh link_acc_file > link_lib_file is run by the program (fasta36, ssearch36, fastx36, etc), where link_acc_file and link_lib_file are temporary file names produced by the program. (The location of the temporary files can be specified with the $TMP_DIR environment variable.) link_acc_file contains a list of accession strings for the statistically significant hits - the information in the description line to the first space, e.g. gi|121719|sp|P08010|GSTM2_RAT gi|121746|sp|P09211|GSTP1_HUMAN from a search against my pir1.lseg library. "expand.sh" then reads that file, extracts the accession information, expands the accessions to a new set of accessions, extracts the expanded set of accessions from a database and writes them to standard output (which is saved in the temporary link_lib_file name). The sequences in expanded link_lib_file are then added to the initial search, and included in the list of best scores (and alignments) if their scores are statistically significant. The additional sequences do not change the initial library size. To test the expansion capability, use an expand.sh script that simply cat's a file of homologs to stdout (which will go to link_lib_file and be read), e.g. expand.sh contains "cat ../seq/gst.lib". Building a program that can take an arbitrary list of accessions and produce a library of homologs is more complicated (and slower), but will allow a smaller database to be searched yet produce results similar to those found from a larger database. >>Mar. 24, 2011 (released as fasta-36.3.4) (comp_lib7.c, dropfx.c, dropfz2.c, doinit.c) Fix a bug in the new help display; identify and correct various memory leaks and references to uninitialized data. >>Mar. 15, 2011 (doc/fasta3x.me, fasta3x.tex) The ancient, rarely updated, fasta3x.me has been replaced with fasta3x.tex, with the goal of producing a more up-to-date, accurate, and comprehensive document describing the capabilities of the FASTA programs. In addition, fasta36.1 has been updated/corrected. (make/Makefile.os_x86_64) Mac OS X clang 2.0, distributed with Xcode4.0, does not properly optimize the smith_waterman_sse2_word() in smith_waterman_sse2.c when clang -O is used to compile. >>Mar. 4, 2011 (doinit.c) Histograms are now turned off by default. -H shows histograms for all programs, not just the *_mpi (PCOMPLIB) programs. >>Feb. 27, 2011 (make/Makefile36m.common, Makefile.pcom_t, Makefile.pcom_s) The threaded programs are now the default, and the *_t versions of programs have been removed from the Unix and unix-like (MacOX) distributions. Windows versions can have either threaded or non-threaded versions, since the threaded windows programs require an additional library. Serial versions of the programs can still be built by editing the make/Makefile36m.common file, and using include Makefile.pcom_s instead of include Makefile.pcom_t. The documentation has been edited to reflect these changes. >>Feb. 24, 2011 (comp_lib5.c, comp_lib7.c, doinit.c, initfa.c, structs.h) The FASTA programs have a much more informative help system. If the -DSHOW_HELP option is included in the Makefile, the following changes occur: (1) the program is no longer interactive by default. To get interaction, use the -I option (-I previously meant showing the identity alignment in lalign; that option is now available with -J). (2) fasta36 and fasta36 -h present a short help message. (3) fasta36 -help provides a complete list of options with a more complete set of options. The getopt() option strings are now built dynamically. >>Feb. 18-21, 2011 (doinit.c) Fix missing -m 9i percent identity/alignment length. Fix issues with short sequence description in -m 6 (html) mode. >>Feb. 17, 2011 (comp_lib5.c, comp_lib7.c, doinit.c) Implementation of -m BB which provides completely BLAST-like output (not just alignments). Modification of the -b ### option. Previously, -b 100 guaranteed 100 alignments; now -b 100 limits to 100 alignments if more than 100 alignments have E()-values less than the -E threshold. An '=' symbol before the number reverts to the previous behavior; e.g. -m =100 guarantees 100 alignments, regardless of E()-value (-m =100 is equivalent to -m 100 -E 100000.0, and disables other setting of the E()-value threshold). >>Feb. 10, 2011 (doinit.c, mshowalign2.c, c_dispn.c) The FASTA programs have a new alignment option, "-m B", which shows alignments in BLAST format (no context, coordinates on the same line, BLAST symbols for matches and mismatches.) This version does not change the descriptions of the alignments, which are still FASTA like, but the alignments themselves should look just like BLAST alignments. Option -m BB makes output even more blast-like, showing not only the alignments, but the initial set of high scoring sequences, and other initial information, like BLAST+. >>Feb. 9, 2011 released as fasta-36.3.3 (dropfs2.c, initfa.c, comp_lib*.c) Modify fasts36/fastm36 to allow up to ktup=3 for proteins; ktup=6 for DNA (previously the max was ktup=2 for both). Modify version string to match release version number. >>Feb. 6, 2011 (initfa.c) Fix bug that prevented fastm36 from working properly with DNA queries. >>Jan. 31, 2011 (pcomp_subs2.c, work_thr2.c) Fixes to fasty36_mpi/tfastx36_mpi problem. Only fasty needs pascii[] for alignments, but it wasn't being sent to workers. Fixed. The MPI versions of the programs have now been tested much more thoroughly. >>Jan. 29, 2011 (comp_lib5.c, comp_lib6.c, comp_lib7.c, work_thr2.c, initfa.c, param.h, dropfs2.c, scaleswt.c, dropfx.c) Translated DNA shuffles (tfastx36, tfasty36) now shuffle DNA as codons. (1) Modify param.h pstruct to include shuffle_dna3, initialized in resetp() [initfa.c] (2) modify buf_shuf_work() to use ppst-zs_win and ppst->shuffle_dna3. (3) Add ppst->zs_off=0 to scaleswt.c/process_hist(). (4) Fix some memory leaks in dropfx.c. (5) Fix some other memory leads in dropfs2.c. >>Jan. 28, 2011 (initfa.c, scaleswn.c, mshowalign2.c) Address crashes that occurred when novel scoring matrices and gap penalties were specified, particularly for DNA. Fix memory problem with long (-L) sequence descriptions. >>Jan. 23, 2011 (comp_lib7.c) comp_lib7.c uses a more efficient strategy for reading chunks of sequences that ensures that sequence data is contiguous for *_mpi programs. comp_lib7.c replaces comp_lib6.c, which will be removed. >>Jan. 22, 2011 (many files) Replace "mw.h" with "best_stats.h", a much more informative name. (drop*.c, p_mw.h, w_mw.h) Remove p_mw.h, w_mw.h from code base and update_params() from drop*.c. These files are left over from the old p2_complib.c parallel programs. >>Jan. 21, 2011 released as fasta-36.3.2 (comp_lib5.c, comp_lib6.c, pcomp_subs2.c) Fixes for MPI version of programs. Earlier versions did not handle DNA/translated DNA comparisons properly, because duplicated sequences (forward/reverse strand) were not handled properly. The current code produces the correct scores and alignments, but probably is much less efficient than it should be. >>Jan. 11, 2011 (initfa.c, scaleswn.c) Re-enable DNALIB_LC (read lower-case DNA sequences as lower case). Reset ktup to default after change for short query in multi-query searches. Address multiple issues associated with variable scoring matrices, i.e. -s '?BP62'. Introduce pst->pam_name for the actual scoring matrix, to distinguish it from pst->pam_file, which can correspond to the std_pam->abbrev, for values like BP62 (which encodes both a matrix and a specific set of gap penalties). Ensure that the new scoring matrix is initialized and extended correctly. Fix some issues with scoring matrix names in scaleswn.c >>Jan. 5, 2010 (dropnnw2.c, dropgsw2.h, global_sse2.c,h, glocal_sse2.c,h) Include SSE2 optimization for global/global and global/local alignments provided by Michael Farrar. Global and glocal alignments are now 20X faster. >>Jan. 5, 2011 re-released as fasta-36.3.1 (initfa.c, last_tat.c) Fix bug resetting pst.e_cut_r for DNA sequences. Modify last_tat.c code to use pre-loaded sequence if available. Remove last_tat.c PCOMPLIB code. >>Jan. 3, 2011 released as fasta-36.3.1 (comp_lib5.c, comp_lib6.c) Add >>><<<, >>>/// to -m 9,10 output for separating multiple query searches. Also clean up extra >>>query line before alignments when no alignments are shown. >>Dec. 16, 2010 (dropgsw2.c, dropnnw2.c, dropnsw.c, comp_lib5.c, comp_lib6.c) Fix bug that caused ssearch to not invert coordinates for reverse-complement DNA alignments (I never imagined using ssearch for DNA) in dropgsw2.c, dropnnw2.c, and dropnsw.c. Add SEQ_PAD to aa0[1] (rev-comp copy) in comp_lib5.c, comp_lib6.c. >>Dec. 14, 2010 Modify CIGAR strings for frameshifts, including 1F and 1R for forward and reverse frameshifts. Extensive documentation updates. doc/fasta36.1 is the most comprehensive and accurate description of FASTA options. >>Dec. 1, 2010 (drop*.c, comp_lib5.c, comp_lib6.c) Correct problems with copying for recursive sub-alignments. Correct bug in adler32_crc calculation that suggested a problem with continued library sequences that did not exist. (initfa.c, defs.h) Use MAXLIB, rather than MAXLIB+MAXTST for comp_lib6.c, which pre-allocates the sequence database. Increase MAXLIB. >>Nov. 24, 2010 (drop*.c, drop_func.h) Modify drop*.c functions that do recursive sub-alignments to avoid modifying the aa1[] sequence array, which conceivably could be in use by other threads. do_walign() now has const *aa0 AND const *aa1. To prevent modification of aa1, sub-regions of aa1 are now copied into newly allocated arrays. >>Nov. 20, 2010 (cal_cons.c, mshowbest.c, mshowalign2.c, doinit.c) The -m 9C option displays an alignment code in CIGAR format. (-m 9c shows the older alignment encoding.) >>Nov. 16, 2010 (beginning of fasta-36.3.*, verstr 36.07) (initfa.c, apam.c, upam.h, param.h) Provide the ability to adjust the scoring matrix based on the length of the query sequence for alignments using a protein alphabet (this could certainly be extended to DNA as well). By including a '?' before the scoring matrix, e.g. -s '?BP62', a shallower matrix will be chosen if the entropy of the selected matrix (i.e. bit score per aligned position) times the length of the protein query is <=DEF_MIN_BITS (defs.h), currently 40 -- this value should be set based on the library size). The FASTA programs include BLOSUM50 (0.49 bits/pos) and BLOSUM62 (0.58 bits/pos) but can range to MD10 (3.44 bits/position). The variable scoring matrix option searches down the list of scoring matrices to find one with information content high enough to produce a 40 bit alignment score. This option is included primarily for metagenomics scans, which can include relatively short DNA reads, and correspondingly short protein translations. Also correct the short-query modification to ktup, so that it works properly with translated FASTX/FASTY searches (ktup is set to 1 when the query_length/3 <= 20). (dropnfa.c, dropfx.c, dropfz2.c) Shuffled sequence alignment scores are calculated identically to library alignment scores. Previously, optimized scores were calculated for all shuffled sequences for FASTA type alignments, even though typically 20 - 40% of library sequences were optimized. Now the two sampling strategies are consistent, though this may cause problems when only a small fraction of sequences are optimized. Small changes to provide consistent dropnfa.c, dropfx.c, dropfz2.c parameter display, and fix display with -m 10. >>Nov. 15, 2010 (initfa.c) Enable statistical thresholds by default (previously, they were enabled with -c -1 or -c 0.01 or anything < 1.0). The "classical" join/opt threshold behavior can be restored with -c O (upper case letter O), or by providing an optimization threshold > 1.0. Statistical thresholds dramatically speed up searches (typically 2-fold), and provide more accurate statistical estimates. The old join/optimization thresholds where optimized for BLOSUM50, and other 1/3-bit scaled scoring matrices, and did not work well with BLOSUM62. Statistical thresholds have been tested extensively, particularly with -z 21, and produce much more reliable statistical estimates. >>Oct. 14, 2010 (Makefile.fcom, cal_cons.c) Edits to re-enable compilation and successful execution of tfasta36(_t). tfasta36 has been superceeded by tfastx36(_t), which is faster, and treats frameshifts as a different type of gap. >>Oct. 13, 2010 (mshowbest.c) Make it more difficult to request more description/scores than are available. >>Sep. 30, 2010 (released as fasta-36.2.7) (comp_lib5.c, comp_lib6.c, dropnfa.c, dropfx.c, dropfz2.c) Fix bugs in DEBUG versions with adler32_crc calculations on overlapping sequences. Add more informative error messages when debugging. Fix a problem with hist2.hist_a != NULL with some compilers. Fix formats for some debugging error messages in dropnfa.c, dropfx.c, and dropfz2.c. Also fix repeat_threshold calculation for very short sequences, to guarantee that all matches as good as the best match with the sequence are found. Fix some problems that prevented FASTA from finding short repeats with short queries. This version of the FASTA36 package offers an alternate main program file, comp_lib6.c, which reads the entire database into memory before doing the search. Using comp_lib6.c can dramatically speed up searches with multiple queries (there is no advantage with single query sequences) on large multi-core computers, as each search is done without re-reading the database. On a 48-core processor, we see speedups greater than 40X with ssearch36_t and fastx36_t. To enable comp_lib6.c, edit the make/Makefile36m.common file to comment out lines refering to comp_lib5.c and un-comment lines referring to comp_lib6.c. >>Sep. 29, 2010 (comp_lib5.c, comp_lib6.c, mshowbest.c) Added -m 8C option, which mimics BLAST+ tabular with comment lines format. >>Sep. 17, 2010 (dropfx.c) Fix a bug in dropfx.c/do_walign() that modified library sequences. (This only caused a problem with comp_lib6.c, which reads the entire database into memory and re-uses sequence buffers. Check sequence consistency with adler32 CRC calculation. >>Sep. 15, 2010 (mshowbest.c, mshowalign2.c) Change the output format slightly. E2() expect values (-z 21+) no longer contain the library size (which is always the same as the E(library_size) value), and the -m 9 +- line no longer contains the frame information, since it is redundant. (The redundant rev-comp remains on the >-- HSP lines.) >>Sep. 14, 2010 (comp_lib5.c, mshowbest.c, drop*.c, cal_cons[f].c, etc.) Implement BLAST -m 8 tabular output. >>Sep. 9, 2010 (compacc.c) Fix a bug in pre_load_best() that disabled -L long sequence descriptions. (doinit.c) Fix a bug that prevented non-overlapping alignments from being displayed when the -E threshold was changed. Before -E 0.001 would disable additional alignments. Now, -E "0.001 0" is required to disable the additional alignments. (drop*.c) The display of search parameters has changed to ensure that gap penalties are displayed on the same line as the scoring matrix. Previously, the FASTA "Parameters:" section looked like: Parameters: BL50 matrix (15:-5)xS ktup: 2 join: 42 (0.0944), opt: 30 (0.601), open/ext: -10/-2, width: 16 Scan time: 0.450 With fasta-36.2.7 (and later), the Parameters: section is: Parameters: BL50 matrix (15:-5), open/ext: -10/-2 ktup: 2, join: 42 (0.102), opt: 30 (0.574), width: 16 The [T]FAST[X/Y] Parameters: section includes the frameshift/substitution penalties (tfasty36): Parameters: BL50 matrix (15:-5) open/ext: -12/ -2 shift: -20, subs: -24 ktup: 2, E-join: 0.5 (0.224), E-opt: 0.1 (0.0536), width: 16 >>Aug. 3, 2010 (released as fasta-36.2.6) (scaleswn.c) Modifications to calc_thresh(), proc_hist_ml(), to better accommodate search strategies (fast?? with statistical thresholds) that provide complete scores only for a high-scoring fraction of sequences. For some query sequences, the E()-values from the database were sometimes much "worse" than E2()-values, an observation that is counter-intuitive (if parameters are estimated against shuffled related sequences, the E()-values should get worse, not better). For some queries, the result was very dramatic (E() < 1E-80, E2() < 1E-150). This error appears to occur because the z-trim or mle_cen thresholds are including many related sequences. -z 2 was modified to censor more sequences when only a subset are scored, and -z 1 was modified to adjust z-trim more carefully. As a result, z-trim was reduced, excluding more sequences. If too many sequence are excluded, then regression statistics do not work, and the program fails over to Altschul-Gish statistics. -z 21+ modified so that MLE statistics are used for shuffle E2() values if Altschul-Gish statistics are used for the library E()-values. >>July 30, 2010 (comp_lib5.c, pcomp_subs2.c) Fix bug in buf_align_seq() that allowed buffer over-runs with long DNA sequences with MPI. Checks on buffer over-runs are now included in pcomp_subs2.c/put_rbuf(),get_wbuf(). Aug. 1, 2010, fixed similar bug in buf_shuf_seq(). -z 21 now works with long DNA sequences. >>July 28, 2010 (mshowalign2.c) Fix lalign36/showalign() to show best sub-optimal E()-value, not bptr[0] E()-value (often identical). >>July 19, 2010 (released as fasta-36.2.5) (wm_align.c, dropfx.c,dropfz2.c) Fix some off-by-one boundary calculations to ensure that every query that can fit into a library is aligned correctly. >>May 18, 2010 Implement comp_lib5.c, which simplifies the structure of comp_lib4.c by moving some calculations into functions. >>May 10, 2010 Fix problem setting nshow with small library in interactive mode. >>May 5, 2010 fasta-36.2.3 Fix bug that prevented shuffled scores to be used properly for small databases (prss capability was lost). >>May 2, 2010 fasta-36.2.2 Fix problem with tat_score values from fasts and fastm. fasta35 did not re-calculate the z-score after last_stats(). fasta36 does, so it must ensure that the e-value (sometimes p-value) is used correctly. >>Apr. 29, 2010 More extensive testing of the MPI-PCOMPLIB programs revealed some problems sending sequences when (or more) frames for the same sequence was used. This problem has been addressed, and large scale testing of fastx36_mpi (with 100K sequence queries in a run) works. >>Apr. 16,19, 2010 (pcomp_subs2.c, comp_lib4.c, work_thr2.c) The MPI-PCOMPLIB parallel version of the FASTA36 programs is working. This PCOMPLIB version takes a very different approach from the older PVM/MPI parallel programs (p2_complib2.c/p2_workcomp2.c) - it works virtually identically to the threaded programs (sharing the same work_thr2.c code and get_rbuf/put_rbuf() (manager) and get_wbuf/put_wbuf() (worker/thread) functions. As a result, in this initial version, the database is NOT distributed to the nodes. During multiple searches, the library is re-read each time. However, load is distributed to workers exactly the way it would be for the threaded system, so the workload should scale. To distinguish them from the earlier mp35compsw, mp35compfa, etc, the new versions are search36_mpi, fasta36_mpi, etc. The programs work with multiple queries, and producing multiple sub-alignments, and work with -m 9c encodings. >>Apr. 7, 2010 (various Makefiles, comp_lib4.c, pcomp_subs2.c, thr_bufs2.h, thr_buf_structs.h) The MPI version of the threaded programs, sseach36_mp, now compiles. pcomp_subs2.c replaces pthr_subs2.c, and thr_bufs.h -> thr_buf_structs.h, thr.h -> thr_bufs2.h, and pcomp_bufs2.h has been added as the equivalent of thr_bufs2.h for PCOMPLIB. >>Apr. 2, 2010 (comp_lib4.c, work_thr2.c, compacc.c) Implement init_aa0(), which isolates code that calls init_work and sets up aa0s, aa1s, f_str[1] (reverse complement) and qf_str so that the same code is used by the serial, threaded, and (future) PCOMP versions. (work_thr2.c) work_thr2.c now contains code for either threaded or PCOMPLIB processes. Threaded processes get stuff from work_info; PCOMPLIB processes get the same information via messages sent from init_thr() called by main(). >>Mar. 30, 2010 (comp_lib4.c, work_thr2.c, thr_bufs.c +pcomp_subs2.c The the data buffers used to communicate between workers and threads have been restructured to separate the old buf2_str, which contained sequence, score results, and alignment results, into three buffers, buf2_data_s, buf2_res_s, and buf2_ares_s, separating sequence data from scores and alignments. This was done to simplify communication in the MPI/PVM environment. Workers should be able to return results directly into the appropriate buffer. >>Mar. 25, 2010 fasta-36.2.1 (dropfx.c, dropfz2.c) Found/removed two "static" declarations in small_global that caused problems with [t]fastx/y with threaded alignments. >>Mar. 24, 2010 (now version 36.06 with threaded alignments) (dropnfa.c) The DNA band aligner in dropnfa.c was not thread safe. This has been fixed. >>Mar. 23, 2010 Code for pre-loading/threaded-aligning sequences has been significantly cleaned up. Checks are made before RANLIB() and re_getlib() in showbest() and showalign() that should be consistent with annotations AND functions that cannot encode alignments. Add mshowalign2.c (which does not do PCOMPLIB) to provide threaded alignments. build_ares_code() and buf_do_align() modified to ignore MX_M9SUMM so that alignments are produced whenever demanded (still does not do alignment if a_res is available). >>Mar. 22, 2010 (comp_lib4.c, work_thr2.c, thr_bufs.h) comp_lib4.c has been modified to thread the alignment encoding (build_ares) for -m 9c. If m_msg.quiet and alignments are required for showbest(), then the program identifies the number of alignments required, reads the sequences (and annotations) into a buffer, and sends them to the threads to be encoded. Then, when showbest() is called, bbp->have_ares has been set, and the alignments are not re-calculated. This should be extended to thread actual alignment production, and additional work is required to clean-up the sequence and bline(description) buffers before a second search. >>Mar. 17, 2010 (comp_lib4.c, dropnfa,fx,fz2.c) Modifications to provide more sensible E2() statistical estimates with threshold-heuristic comparison functions and -z 21. Also fixed bug that caused the wrong zs_off to be used with -z 21. dropnfa,fx,fz2.c now optimize all scores when shuff_flg is set. >>Mar. 16, 2010 (comp_lib4.c, scaleswn.c, drop*.c) A new, relatively consistent, statistical estimation strategy has been introduced for the heuristic programs that optimize only a fraction of scores (fasta36, [t]fast[xy]36). Statistics-based heuristic thresholds can increase search speed 2 - 4-fold by doing band optimization on only a small fraction of library sequences (with the -c -1 option, about 10% of alignments are band-optimized, compared with more than 50% with the classic thresholds). However, optimizing only a small part of the library produces two classes of scores, optimized (10% or less) and non-optimized, with different statistical properties. fasta36 addresses this problem by calculating statistical estimates only for the optimized scores, and then correcting the significance of the score by accounting for the frequency of optimization. For example, sampling only 5% of scores increases the z-value (std. deviation above the mean) by -logE(0.05)*sqrt(6)/Pi = 2.34 which offsets the z-score by 23.4. This effect is only seen when the -c option is used to specify statistical thresholds, and is most apparent when looking at the histogram, which will be offset by the appropriate z-score. This strategy appears to produce more accurate statistics in general, but can produce less accurate statistics for the heuristic programs when the -z 21 option is used. >>Mar. 3, 2010 (comp_lib4.c) Fix the new stats[] sampling strategy to sample >60K sequences more more uniformly. The old code massively over-sampled later sequences, because of several bugs. The new code works as expected. The first 60K sequences are represented about 30% more than the rest, but after 60K, sequences are sampled moderately uniformly. The older SAMP_STATS_MORE is uniform across all the scores. (build_ares.c) Move code to produce chains of alignments (a_res) produced by do_walign, followed by subsequent calls to calc_id, calc_code, into a new function, build_ares_code(), which is shared by the serial/threaded and parallel (p2_workcomp.c) programs. This is a first step towards having the parallel programs produce multiple HSP alignments. >>Feb. 27, 2010 (lib_sel.c) Fix problem with new chained library access that prevented more than two files from being searched. Also, library name string has been lengthened to allow a list of libraries to be displayed. >>Feb. 26, 2010 Parallel programs have been tested in both PVM and MPI versions, and some additional bugs have been fixed. Currently, the PVM/MPI versions are fully functional, but only with FASTA35 capabilities. The new multiple HSP alignments and best-shuffle E2() scores are not yet available. >>Feb. 24, 2010 Fix some leaks, largely do to more complex alignment data structures for multiple alignments. Currently, all the major leaks are in data structures allocated in main(), and which I don't bother to de-allocate (mostly library buffer memory). Change zsflag > 10 to zsflag >= 10 && zsflag < 20 in three places. Too many shuffles were being done with zsflag==21. >>Feb. 22, 2010 Begin conversion of p2_complib2.c/p2_workcomp.c. Very old code to allocate aln_d_base removed from v35 and v36. No code for best list shuffle, or multiple high-scoring alignments. However, the code now works properly with statistical thresholds. (Changes made to p2_complib2.c, p2_workcomp.c to update pst struct after last_param.()). >>Feb. 19, 2010 fasta-36x6 Fix issues with -z 26 statistics. Add description of E2() statistics. Added option to specify statistics routine for best-shuffled statistics independently of library statistics by specifying a second -z option. Thus, -z "21 2" uses regression scaled statistics for the library estimate, and MLE statistics for the best-shuffled estimates. >>Feb. 17, 2010 fasta-36x5 Some of the simplifications dealing with threads in comp_lib4.c failed on some compilers and architectures. The code for terminating threads has been modified to allow sequence buffers with zero entries, to simplify the empty_buffer logic. There is now an explicit option to terminate threads by setting lib_bhead_p->stop_thread. However, this flag is never set, as rbuf_done() stops the threads instead. Also fix problem with stats_idx being associated with wrong buf2_p in two frame searches. >>Feb. 15, 2010 fasta-36x4 fasta36 can now display both "search" (E()) and "shuffled" (E2()) E()-value calculation and display in the best scores and alignments. If the -z option is greater than 20, then two evalues are calculated, one from the search (e.g. -z 1 uses regression scaled scores) and a second derived from shuffling the high scoring sequences. The high-scoring sequence shuffled scores are approximately equivalent to doing a PRSS (pairwise shuffle), but more efficient. High-scoring shuffled E()-values (labled E2()) are typically 2 - 5-fold more conservative for average composition proteins, and 10 - 20X more conservative for biased composition proteins. Fix another bug in -S alignment scores vs opt scores in ssearch36 (see Feb. 8). >>February 12, 2010 (prev. version 142) Create comp_lib4.c (from comp_lib3.c), which simplifies some of the processes for handling buffers of results (no more empty_reader_bufs) and enables shuffles of high-scoring sequences to evaluate significance. >>February 8, 2010 Fix a problem with scores and E()-values for SSEARCH sub-alignments when the -S option is used. When the -S option was used to ignore lower-case residues in query or library for the initial score, the final alignments include the lower-case masked residues. The SSEARCH36 was using the non-masked alignment score, rather than the orginal score (FASTA36, and [T]FAST[XY]36 used the masked score). This was incorrect, as the statistics are calculated for masked sequences. The corrected version calculates both a non-masked and a masked score, where the masked score (for subalignments) uses the non-masked alignment. [T]FAST[XY]36 had a related problem, which is that when multiple sequences are in the query with the same pam2p[0] (no -S) score, then the wrong alignment could be shown with the initial scores. Fixing this requires that the alignment routine only work on the region specified from the initial band (fixed in dropnfa.c, dropfx.c, and dropfz2.c). >>February 4, 2010 The more efficient statistical thresholds in fasta36 have been disabled by default. They can be turned on with -c -1, or by setting thesholds (-c "0.05 0.2" would set E_band_opt to 0.05 - target 5% of sequences - and E_join at 20% target). My initial implementation produced very inaccurate statistics, presumably because only a small fraction of unrelated sequences were being band-optimized (fasta35 typically optimized about 60% of library sequences, fasta36 with statistical thresholds optimizes about 2%, which causes a 2 - 3X speed increase). The sampling strategy for fasta36, and [t]fast[xy]36 scores has been adjusted to provide relatively accurate scores for searches that optimize only a small fraction of sequences. On the cases I have tested, statistical accuracy is comparable to, or better than, the version 35 programs, but probably not as robust as ssearch estimates. >>January 29, 2010 The logic to predetermine where scores went for shuffling breaks when some scores are not calculated (e.g. -M 200 - 300). Fix by using nstats as the index for nstats < MAX_STATS, and then use stats_idx afterwards. Provide more efficient score sampling logic. The old method (left over from fasta34 or earlier) generated a random number for every sequence after MAX_STATS; if it was less than MAX_STATS, the sample was used. This logic is still available with -DSAMP_STATS_MORE. The new logic samples every other sequence between MAX_STATS and 2*MAX_STATS, every third between 2*MAX_STATS and 3*MAXSTATS, etc, and randomly replaces one of the stats scores. For 430K SwissProt, this reduces the number of samples from 178K to about 145K, and reduces the number of calls to the random number generator from 430K to 85K. >>January 28, 2010 (comp_lib3.c, mrandom.c) Tests of ssearch36 statistical accuracy suggests that the default statistical estimates (-z 1) are not as accurate as they should be with BLOSUM62, -11/-1. Both -z 11 and -z 2 work better. In FASTA35, -z 11 - 15 caused a 2X-slowdown (actually more) because EVERY library sequence was shuffled, even though only a fraction of the sequences (for libraries > 60,000 would be used for the statistical calculation. comp_lib3.c uses a more sophisticated strategy for sampling scores after 60,000 so that sequences are only shuffled and aligned if they will be used in the statistical calculation. Doing this on SwissProt, with 430,000 sequences, means that ~180,000 additional shuffle alignments are done, not 430,000 additional. However, using -z 11 with the threaded program was much more than 2X-slower -- random() is not re-entrant, and is designed to provide a consistent set of random numbers over threads, so threads were waiting on the random number generator, with a big performance penalty. Using code from WikiPedia, I implemented a random number generator (mrandom.c) that saves a local copy of state, so threaded -z 11 has the correct performance penalty. >>January 25, 2010 (initfa.c 36.04 January 2010) (dropfz2.c, aln_struct.h) At long last, tfasty36 correctly produces multiple alignments on the reverse strand. (Jan. 26, 2010) Fixed introduced bug in fasty36 that used wrong offset in recursion. >>January 17, 2010 Extensive changes have been made to all the drop_* functions, so that multiple alignment results are properly sorted from highest to lowest sw_score. dropnfa.c, dropgsw2.c, dropfx.c and dropfz2.c now all use similar strategies to calculate non-overlapping alternative alignments. score_thresh thresholds are applied to rst.score[ppst->score_ix] appropriately for all recursive functions. >>August 24, 2009 Statistical thresholds have been adjusted to produce more approximately the correct number of joins/band optimizations. The approximate fraction of joins/band optimizations is now shown in the results. >>August 21, 2009 fasta/fastx/fasty/tfastx/tfasty now use statistically based thresholds for joining short segments and deciding to do a band optimization -- similar to the threshold strategy used by BLAST. The statistical thresholds used are set with the -c option, which used to be used to set optcut. The -c option now has three ranges: -c < 0 -- use the old FASTA thresholds, calculated in the same way 0 < -c < 1.0 -- use the statistical thresholds and set E_opt_cut. c >= 1.0 -- use the old FASTA threshold, and specify it. For 0 < -c < 1.0, a second argument can be supplied (-c "0.02 0.1") for the joining E()-threshold. If this value is < 1.0, it is used as E_join; if it is > 1.0, E_opt_cut is multiplied by the value to get E_join. >>August 19, 2009 Implement Lambda/K/H based c_gap, opt_cut in dropnfa.c, dropfx.c (fastx), and dropfz2.c (fasty). Add ELK_to_s() to scaleswn.c. >>August 11, 2009 Fix bug in dropfx.c that used the wrong variables for calculating offsets into a long DNA sequence for subset alignments. Stop putting sw_score in score[0] when no score[0] was calculated. Use 0 instead. >>July 31, 2009 (dropgsw2.c) Fix problems with dropgsw2.c that allowed poor sub-alignments to be shown. Consolidate merge_ares_acc() for all the functions. Add pst.do_rep to disable multiple alignments. >>July 6, 2009 (initfa.c, apam.c, complib2.c, p2_complib.c) move changes for validate_novel_aa() from fasta35. (initfa.c) Enable checks for unusual characters ('Uu' in proteins) for many more programs with the -p option. >>June 16, 2009 Modify statistical sampling strategy to greatly simplify the calculation. >>May 15, 2009 Fix bug in lav2ps.c, lav2svg.c that occured when displaying very long sequence alignments (e.g. genome alignments). The maximum coordinate is set properly now. >>May 5, 2009 (initfa.c) Fix bug (int e_cut in pgm_def_arr[]) that prevented e_cut to be set properly for lalign for DNA. >>May 4, 2009 The functions that return multiple sub-alignments (HSPs) after the best alignment have been modified to ensure that alignments are returned sorted by score, by merging the list of alignments found to the left and right of the best alignment. >>April 28, 2009 (p2_complib2.c, p2_workcomp2.c, mshowbest.c, mshowalign.c) modified to support new coordinate system, preliminary work on multiple HSPs in parallel environment. >>April 14, 2009 (comp_lib2.c, nmgetaa.c) Comprehensive restructuring of library file list from a fixed length array to a variable length linked list. The link lists allows library files to insert additional files into the list, so that, for example, a file of accession numbers can refer to a list of files for the accessions. Eventually, this should allow FASTA to support .pal/.nal files from the NCBI, and to support files of file names most places file names are allowed. >>April 2, 2009 (from fasta35) (structs.h, comp_lib2.c, doinit.c, mshowbest.c, mshowalign.c) The code that selects the number of high scores to display has been reorganized to support the -F e_low option (which was not implemented properly if -b and -d were specified). The code is simplified; m_msg.nshow is used to specify the number of best scores listed, and min(m_msg.nshow, m_msg.ashow) is used to specify the number of alignments shown. >>March 26, 2009 (from fasta35 - fa35_04_07) (initfa.c) Fix problems with 'U' recognition in DNA pam matrix, correct implementation of -r +mat/-mis. Previous versions of fasta35 may not have used the correct DNA matrix when the -r +mat/-mis option was specified. >>March 23, 2009 (initfa.c verstr -> 36.02) (mshowbest.c, aln_structs.h) Add loop for displaying multiple aligned regions with -m 9, -m 9i, and -m 9c in mshowbest.c. >>March 22, 2009 (dropgsw2.c, dropnnw2.c, wm_align.c) Rearrange code in dropgsw2.c, dropnnw2.c (which replaces dropnnw.c) so that a single function, wm_align.c:nsw_malign() is responsible for recursive algnments for both dropgsw2.c (sw_walign) and dropnnw2.c (nw_walign). The strategy for tnese (Smith-Waterman, Global-Local) alignments is identical. nsw_malign() uses a function pointer that calculates S-W or N-W that it gets from dropgsw2.c or dropnnw2.c It might make sense to use a similar strategy for the recursive translated alignments. >>March 19, 2009 (map_db.c, mm_file.h) Fix another bug in map_db.c that appears for sequence files larger than 2Gb. MM_OFF is now consistently used in more of the places where an int64_t might is required. >>March 17, 2009 (list_db.c) Fix a bug in list_db that caused it to misread the maximum sequence length, and then be off by 4-bytes for all the offsets. Include list_db with map_db in the list of auxiliary programs. >>Mar. 8, 2009 fa35_04_06 (comp_lib2.c, pthr_subs2.c, pthr_subs.h, doinit.c, dec_pthr_subs.c) Dynamically allocate pthread_t *fa_threads, rather than limit it to MAX_WORKERS. MAX_WORKERS is no longer used in the Unix environment; it gets its value from sysconf(_SC_NPROCESSORS_CONF). If sysconf() is not available, MAX_WORKERS is used. The threaded programs should now automatically adjust the number of threads to the number of processors. Moreover, the number of threads can be set to more than the number of processors with -T #threads. Also, max_workers was renamed fa_max_workers, and pthread_t *threads is now *fa_threads. >>Mar. 6, 2009 copied comp_lib2.c from v35 (fix for query offset coordinates) >>Oct. 22, 2008 The programs that allow multiple alignments to be found include: ssearch36(_t) fasta36(_t) fastx36(_t) fasty36(_t) fasts and fastf will probably not be updated in this way, because of the difficulty in reconstructing alignments, but fastm may be. Right now, the pvm/mpi versions of the programs do not support multiple sub-alignments. >>Sep. 25, 2008 Modify the syntax for the -E option to allow the repeat E()-value cutoff to be specified in either of two ways. -E "e_cut e_rep" If the value of e_rep is less than one, it is taken as the absolute E()-value threshold for additional local domains, for example: -E "1.0 0.05" says use 1.0 for the main E()-value threshold, and 0.05 as the threshold for additional local alignments. Alternatively, if e_rep >= 1.0, it is taken as a divisor for the E()-value threshold, thus: -E "1.0 10.0" Sets the E()-value threshold for additional local alignments to 1.0/10.0 = 0.1. Finally, if e_rep <= 0.0, no multiple alignments are done (equivalent to previous versions of FASTA). fasta36-36.3.8i_14-Nov-2020/doc/readme.w32000066400000000000000000000044471433453312700172350ustar00rootroot00000000000000September 7, 2015 On windows machines, the threaded programs are now capable of automatically detecting the number of threads. The pthreadsVC2.dll is still required, but it is now included in the program directory (bin/). October 6, 2006, updated September 7, 2015 The FASTA programs for Windows32 environments (Windows7 and later) has undergone a major upgrade, so that now all the programs in the Unix/MacOSX distribution are available to Windows users. Moreover, Windows users with modern (SSE2 compatible) processors can run greatly accelerated versions of the Smith-Waterman ssearch program. Moreover, these programs work both with FASTA formatted files, and NCBI BLAST formatted files. The following programs are available: fasta36.exe protein-protein or DNA-DNA database searches fastf36.exe fastm36.exe fasts36.exe fastx36.exe compare DNA query to protein library with frameshifts fasty36.exe compare DNA query to protein library with frameshifts ssearch36.exe Smith-Waterman for prot-prot or DNA-DNA searches, accelerated with SSE2 extensions tfastf36.exe tfastm36.exe tfasts36.exe tfastx36.exe compare protein to DNA library with frameshifts tfasty36.exe compare protein to DNA library with frameshifts Each of these programs also has a "threaded" version, which can run on multiple processors (or multiple cores) if they are available. However, they are built using the Unix pthreads API, so to use these programs, you must download the pthreadVC2.dll from: ftp://sources.redhat.com/pub/pthreads-win32/dll-latest/lib/pthreadVC2.dll see also http://sourceware.org/pthreads-win32/ fasta36_t.exe fastf36_t.exe fastm36_t.exe fasts36_t.exe fastx36_t.exe fasty36_t.exe ssearch36_t.exe tfastf36_t.exe tfasts36_t.exe tfastx36_t.exe tfasty36_t.exe Without that DLL, the threaded programs will not run at all. The current compilation supports two threads, and speeds up searches about 2-fold on dual-core processors. The programs have been tested with protein and DNA databases in FASTA format, PIR/GCG-text format, and Genbank flatfile format. The program does not work properly with GCG binary format databases, but it seems unlikely that Windows users would need these. Please report bugs to: wrp@virginia.edu fasta36-36.3.8i_14-Nov-2020/make/000077500000000000000000000000001433453312700156025ustar00rootroot00000000000000fasta36-36.3.8i_14-Nov-2020/make/Makefile000066400000000000000000000031451433453312700172450ustar00rootroot00000000000000# # makefile for fasta3, fasta3_t. Use makefile.pvm for pvcompxx. # # # Dec 8, 2005 - with gcc4.0.2 (or .1) under Redhat Linux Fedora FC4 -03 breaks the alignment code # CC ?= gcc -g -O2 #CC=gcc -Wall -pedantic -ansi -g -O #CC = gcc -g -DDEBUG #CC= /usr/local/parasoft/bin.linux2/insure -g -DDEBUG # EBI uses the following with pgcc, -O3 does not work: # CC= pgcc -O2 -pipe -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer # this file works for x86 LINUX # standard options CFLAGS += -DSHOWSIM -DUNIX -DTIMES -DHZ=100 -DSFCHAR="':'" -DMAX_WORKERS=2 -DTHR_EXIT=pthread_exit -DPROGRESS -DUSE_MMAP -D_REENTRANT -DHAS_INTTYPES -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -DUSE_FSEEKO -DSAMP_STATS -DPGM_DOC # -I/usr/local/include/mysql -DMYSQL_DB # #(for mySQL databases) (also requires change to Makefile34.common) LIB_M = -lm #LIB_M = -L/usr/local/lib/mysql -lmysqlclient -lm # for mySQL databases HFLAGS= # for Linux THR_SUBS = pthr_subs2 THR_LIBS = -lpthread THR_CC = BIN = ../bin XDIR = /seqprg/bin DROPGSW_NA_O = dropgsw2.o wm_align.o calcons_sw.o DROPGSW_SSE_O = dropgsw2_sse.o smith_waterman_sse2.o wm_align.o calcons_sw.o DROPGSW_ALT_O = dropgsw2_alt.o smith_waterman_altivec.o wm_align.o calcons_sw.o DROPGSW_O = $(DROPGSW_SSE_O) DROPLAL_NA_O = droplal2.o lsim4.o calcons_la.o DROPLAL_SSE_O = droplal2_sse.o smith_waterman_sse2.o lsim4.o calcons_la.o DROPLAL_ALT_O = droplal2_sse.o smith_waterman_altivec.o lsim4.o calcons_la.o DROPLAL_O = $(DROPLAL_SSE_O) # renamed (fasta36) programs include ../make/Makefile36m.common # conventional (fasta3) names # include ../make/Makefile.common fasta36-36.3.8i_14-Nov-2020/make/Makefile.NetBSD000066400000000000000000000016121433453312700203200ustar00rootroot00000000000000# # this file works for NetBSD # # provided by Marc Baudoin # CC= cc -O #CC= cc -g -DDEBUG #CC= gcc -g -Wall # # standard line for normal searching CFLAGS= -DM10_CONS -DUNIX -DTIMES -DHZ=60 -DMAX_WORKERS=4 -DTHR_EXIT=pthread_exit -DFASTA_HOST='"your.host.here/fasta/cgi"' -DUSE_MMAP # special options for SUPERFAMLIES #CFLAGS= -DM10_CONS -DUNIX -DTIMES -DHZ=60 -DSFCHAR="'|'" -DMAX_WORKERS=4 -DTHR_EXIT=pthread_exit -DPROGRESS -DSUPERFAMNUM -DUSE_MMAP LIB_M= -lm HFLAGS= # for NetBSD THR_SUBS = pthr_subs2 THR_LIBS = -L/usr/pkg/pthreads/lib -lpthread THR_CC = -I/usr/pkg/pthreads/include BIN = ../bin XDIR = /seqprg/slib/bin # set up files for SSE2/Altivec acceleration # include ../make/Makefile.sse_alt # no acceleration # DROPGSW_O = $(DROPGSW_NA_O) DROPLAL_O = $(DROPLAL_NA_O) DROPGNW_O = $(DROPGNW_NA_O) DROPLNW_O = $(DROPLNW_NA_O) include ../make/Makefile36m.common fasta36-36.3.8i_14-Nov-2020/make/Makefile.cray_pvp000066400000000000000000000014301433453312700210620ustar00rootroot00000000000000# # makefile for fasta35 # # for more information on FASTA on CRAY's, see: # # http://home.cray.com/~cpsosa/ChemApps/BioInf/fasta/fasta.html # provided by: Carlos P. Sosa, cpsosa@cray.com # CC= cc -h inline1,scalar3,task0,vector2 HFLAGS= LIB_M= # CFLAGS= -DUNIX -DTIMES -DSFCHAR="':'" -DMAX_WORKERS=4 -DTHR_EXIT=pthread_exit -DIS_BIG_ENDIAN THR_SUBS = pthr_subs THR_LIBS = -lpthread THR_CC = BIN = ../bin XDIR = /seqprg/slib/bin # set up files for SSE2/Altivec acceleration # include ../make/Makefile.sse_alt # no acceleration # DROPGSW_O = $(DROPGSW_SSE2_O) DROPLAL_O = $(DROPLAL_SSE2_O) DROPGNW_O = $(DROPGNW_SSE2_O) DROPLNW_O = $(DROPLNW_SSE2_O) # renamed (fasta35) programs include ../make/Makefile33.nommap # conventional (fasta3) names # include ../make/Makefile.common fasta36-36.3.8i_14-Nov-2020/make/Makefile.fcom000066400000000000000000000351621433453312700201740ustar00rootroot00000000000000 #================ common .o files doinit.o : doinit.c defs.h param.h rstruct.h upam.h structs.h uascii.h aln_structs.h $(CC) $(THR_CC) $(CFLAGS) -c doinit.c init_sw.o : initfa.c defs.h param.h rstruct.h upam.h structs.h aln_structs.h $(CC) $(THR_CC) $(CFLAGS) -c -DSSEARCH initfa.c -o init_sw.o init_sw_sse.o : initfa.c defs.h param.h rstruct.h upam.h structs.h aln_structs.h $(CC) $(THR_CC) $(CFLAGS) -c -DSW_SSE2 -DSSEARCH initfa.c -o init_sw_sse.o init_sw_alt.o : initfa.c defs.h param.h rstruct.h upam.h structs.h aln_structs.h $(CC) $(THR_CC) $(CFLAGS) -c -DSW_ALTIVEC -DSSEARCH initfa.c -o init_sw_alt.o init_lal.o : initfa.c defs.h param.h rstruct.h upam.h structs.h aln_structs.h $(CC) $(THR_CC) $(CFLAGS) -c -DLALIGN initfa.c -o init_lal.o init_lnw.o : initfa.c defs.h param.h rstruct.h upam.h structs.h aln_structs.h $(CC) $(THR_CC) $(CFLAGS) -c -DGLSEARCH initfa.c -o init_lnw.o init_lnw_sse.o : initfa.c defs.h param.h rstruct.h upam.h structs.h aln_structs.h $(CC) $(THR_CC) $(CFLAGS) -c -DSW_SSE2 -DGLSEARCH initfa.c -o init_lnw_sse.o init_gnw.o : initfa.c defs.h param.h rstruct.h upam.h structs.h aln_structs.h $(CC) $(THR_CC) $(CFLAGS) -c -DGGSEARCH initfa.c -o init_gnw.o init_gnw_sse.o : initfa.c defs.h param.h rstruct.h upam.h structs.h aln_structs.h $(CC) $(THR_CC) $(CFLAGS) -c -DSW_SSE2 -DGGSEARCH initfa.c -o init_gnw_sse.o init_rss.o : initfa.c defs.h param.h rstruct.h upam.h structs.h aln_structs.h $(CC) $(THR_CC) $(CFLAGS) -c -DPRSS initfa.c -o init_rss.o init_rfx.o : initfa.c defs.h param.h rstruct.h upam.h structs.h aln_structs.h $(CC) $(THR_CC) $(CFLAGS) -c -DPRSS -DFASTX initfa.c -o init_rfx.o init_fa.o : initfa.c defs.h param.h rstruct.h upam.h structs.h aln_structs.h $(CC) $(THR_CC) $(CFLAGS) -c -DFASTA initfa.c -o init_fa.o init_ff.o : initfa.c defs.h param.h rstruct.h upam.h structs.h aln_structs.h $(CC) $(THR_CC) $(CFLAGS) -c -DFASTF initfa.c -o init_ff.o init_tf.o : initfa.c defs.h param.h rstruct.h upam.h structs.h aln_structs.h $(CC) $(THR_CC) $(CFLAGS) -c -DFASTF -DTFAST initfa.c -o init_tf.o init_fs.o : initfa.c defs.h param.h rstruct.h upam.h structs.h aln_structs.h $(CC) $(THR_CC) $(CFLAGS) -c -DFASTS initfa.c -o init_fs.o init_fm.o : initfa.c defs.h param.h rstruct.h upam.h structs.h aln_structs.h $(CC) $(THR_CC) $(CFLAGS) -c -DFASTM initfa.c -o init_fm.o init_tfs.o : initfa.c defs.h param.h rstruct.h upam.h structs.h aln_structs.h $(CC) $(THR_CC) $(CFLAGS) -c -DFASTS -DTFAST initfa.c -o init_tfs.o init_tfm.o : initfa.c defs.h param.h rstruct.h upam.h structs.h aln_structs.h $(CC) $(THR_CC) $(CFLAGS) -c -DFASTM -DTFAST initfa.c -o init_tfm.o init_tfa.o : initfa.c defs.h param.h rstruct.h upam.h structs.h aln_structs.h $(CC) $(THR_CC) $(CFLAGS) -c -DFASTA -DTFAST initfa.c -o init_tfa.o init_fx.o : initfa.c defs.h param.h rstruct.h upam.h structs.h aln_structs.h $(CC) $(THR_CC) $(CFLAGS) -c -DFASTX initfa.c -o init_fx.o init_tfx.o : initfa.c defs.h param.h rstruct.h upam.h structs.h aln_structs.h $(CC) $(THR_CC) $(CFLAGS) -c -DFASTX -DTFAST initfa.c -o init_tfx.o init_fy.o : initfa.c defs.h param.h rstruct.h upam.h structs.h aln_structs.h $(CC) $(THR_CC) $(CFLAGS) -c -DFASTY initfa.c -o init_fy.o init_tfy.o : initfa.c defs.h param.h rstruct.h upam.h structs.h aln_structs.h $(CC) $(THR_CC) $(CFLAGS) -c -DFASTY -DTFAST initfa.c -o init_tfy.o #================ miscellaneous htime.o : htime.c $(CC) $(THR_CC) $(CFLAGS) -c htime.c compacc2_t.o : compacc2e.c upam.h uascii.h param.h rstruct.h structs.h $(MWH) defs.h aln_structs.h drop_func.h dyn_string.h $(CC) $(THR_CC) $(CFLAGS) -DCOMP_THR -DCOMP_MLIB -c compacc2e.c -o compacc2_t.o compacc2_s.o : compacc2e.c upam.h uascii.h param.h rstruct.h structs.h $(MWH) defs.h aln_structs.h drop_func.h dyn_string.h $(CC) $(THR_CC) $(CFLAGS) -DCOMP_MLIB -c compacc2e.c -o compacc2_s.o compacc2_p.o : compacc2e.c upam.h uascii.h param.h rstruct.h structs.h $(MWH) defs.h aln_structs.h drop_func.h dyn_string.h $(CC) $(THR_CC) $(CFLAGS) -DMPI_SRCB -c compacc2e.c -o compacc2_p.o compacc.o : compacc.c upam.h uascii.h param.h rstruct.h structs.h $(MWH) defs.h aln_structs.h drop_func.h $(CC) $(THR_CC) $(CFLAGS) -DCOMP_THR -c compacc.c -o compacc.o apam.o : apam.c defs.h param.h uascii.h upam.h $(CC) $(THR_CC) $(CFLAGS) -c apam.c pssm_asn_subs.o : pssm_asn_subs.c defs.h $(CC) $(THR_CC) $(CFLAGS) -c pssm_asn_subs.c #================ display list of best hits / alignments showbest.o : $(SHOWBESTC) $(MWH) defs.h param.h rstruct.h structs.h aln_structs.h drop_func.h $(CC) $(THR_CC) $(CFLAGS) -c $(SHOWBESTC) -o showbest.o build_ares.o : build_ares.c $(MWH) defs.h param.h rstruct.h structs.h aln_structs.h drop_func.h dyn_string.h $(CC) $(THR_CC) $(CFLAGS) -c build_ares.c -o build_ares.o $(SHOWALIGN_T).o : $(SHOWALIGN).c $(MWHP) defs.h structs.h param.h rstruct.h aln_structs.h drop_func.h dyn_string.h $(CC) $(THR_CC) $(CFLAGS) -DCOMP_THR -c $(SHOWALIGN).c -o $(SHOWALIGN_T).o $(SHOWALIGN_P).o : $(SHOWALIGN).c $(MWHP) defs.h structs.h param.h rstruct.h aln_structs.h drop_func.h dyn_string.h $(CC) $(THR_CC) $(CFLAGS) -DMPI_SRC -c $(SHOWALIGN).c -o $(SHOWALIGN_P).o $(SHOWALIGN_S).o : $(SHOWALIGN).c $(MWHP) defs.h structs.h param.h rstruct.h aln_structs.h drop_func.h dyn_string.h $(CC) $(THR_CC) $(CFLAGS) -c $(SHOWALIGN).c -o $(SHOWALIGN_S).o $(LSHOWALIGN).o : $(SHOWALIGN).c $(MWHP) defs.h structs.h param.h rstruct.h aln_structs.h drop_func.h dyn_string.h $(CC) $(THR_CC) $(CFLAGS) -DLALIGN -c $(SHOWALIGN).c -o $(LSHOWALIGN).o re_getlib.o : re_getlib.c mw.h mm_file.h $(CC) $(THR_CC) $(CFLAGS) -c re_getlib.c lib_sel.o : lib_sel.c defs.h structs.h rstruct.h $(CC) $(THR_CC) $(CFLAGS) -c lib_sel.c c_dispn.o : c_dispn.c defs.h structs.h param.h rstruct.h aln_structs.h $(CC) $(THR_CC) $(CFLAGS) -c c_dispn.c #================ statistical functions karlin.o : karlin.c param.h rstruct.h $(CC) $(THR_CC) $(CFLAGS) -c karlin.c scale_se.o : scaleswn.c defs.h param.h rstruct.h structs.h $(MWH) alt_parms.h $(CC) $(THR_CC) $(CFLAGS) -DLOCAL_SCORE -c scaleswn.c -o scale_se.o scale_sn.o : scaleswn.c defs.h param.h rstruct.h structs.h $(MWH) alt_parms.h $(CC) $(THR_CC) -DNORMAL_DIST $(CFLAGS) -c scaleswn.c -o scale_sn.o scaleswtf.o : scaleswt.c defs.h param.h rstruct.h structs.h $(MWH) alt_parms.h $(CC) $(THR_CC) $(CFLAGS) -DFASTF -c scaleswt.c -o scaleswtf.o scaleswts.o : scaleswt.c defs.h param.h rstruct.h structs.h $(MWH) alt_parms.h $(CC) $(THR_CC) $(CFLAGS) -c scaleswt.c -o scaleswts.o tatstats_fs.o : tatstats.c tatstats.h $(CC) $(THR_CC) $(CFLAGS) -c -DFASTS tatstats.c -o tatstats_fs.o tatstats_ff.o : tatstats.c tatstats.h $(CC) $(THR_CC) $(CFLAGS) -c -DFASTF tatstats.c -o tatstats_ff.o tatstats_fm.o : tatstats.c tatstats.h $(CC) $(THR_CC) $(CFLAGS) -c -DFASTM tatstats.c -o tatstats_fm.o last_tat.o : last_tat.c defs.h mm_file.h structs.h param.h rstruct.h $(CC) $(THR_CC) $(CFLAGS) -c last_tat.c last_thresh.o : last_thresh.c defs.h mm_file.h structs.h param.h rstruct.h $(CC) $(THR_CC) $(CFLAGS) -c last_thresh.c #================ drop functions - actual scores/alignments drop_nfa.o : dropnfa.c dropnfa.h param.h rstruct.h defs.h drop_func.h dyn_string.h $(CC) $(THR_CC) $(CFLAGS) -c dropnfa.c -o drop_nfa.o dropsbd.o : dropnfa.c dropnfa.h param.h rstruct.h defs.h drop_func.h dyn_string.h $(CC) $(THR_CC) $(CFLAGS) -c dropsbd.c -o dropsbd.o # drop_ff, _fs, _fm must define FASTF, FASTS, and FASTM to ensure # that tatstats.h is built appropriately drop_ff2.o : dropff2.c param.h rstruct.h defs.h tatstats.h drop_func.h dyn_string.h $(CC) $(THR_CC) $(CFLAGS) -c -DFASTF dropff2.c -o drop_ff2.o drop_tff.o : dropff2.c param.h rstruct.h defs.h tatstats.h drop_func.h dyn_string.h $(CC) $(THR_CC) $(CFLAGS) -c -DFASTF -DTFAST dropff2.c -o drop_tff.o drop_fs2.o : dropfs2.c param.h rstruct.h defs.h tatstats.h drop_func.h dyn_string.h $(CC) $(THR_CC) $(CFLAGS) -DFASTS -c dropfs2.c -o drop_fs2.o drop_tfs.o : dropfs2.c param.h rstruct.h defs.h drop_func.h dyn_string.h $(CC) $(THR_CC) $(CFLAGS) -c -DTFAST -DFASTS dropfs2.c -o drop_tfs.o drop_fm.o : dropfs2.c param.h rstruct.h defs.h drop_func.h dyn_string.h $(CC) $(THR_CC) $(CFLAGS) -c -DFASTM dropfs2.c -o drop_fm.o drop_tfm.o : dropfs2.c param.h rstruct.h defs.h drop_func.h dyn_string.h $(CC) $(THR_CC) $(CFLAGS) -c -DTFAST -DFASTM dropfs2.c -o drop_tfm.o drop_tfa.o : dropnfa.c dropnfa.h upam.h param.h rstruct.h defs.h dyn_string.h $(CC) $(THR_CC) $(CFLAGS) -c -DTFASTA dropnfa.c -o drop_tfa.o drop_fx.o : dropfx2.c upam.h param.h rstruct.h defs.h drop_func.h dyn_string.h $(CC) $(THR_CC) $(CFLAGS) -c dropfx2.c -o drop_fx.o drop_tfx.o : dropfx2.c upam.h param.h rstruct.h defs.h drop_func.h dyn_string.h $(CC) $(THR_CC) $(CFLAGS) -c -DTFAST dropfx2.c -o drop_tfx.o drop_fz.o : dropfz3.c upam.h param.h rstruct.h defs.h aamap.h drop_func.h dyn_string.h $(CC) $(THR_CC) $(CFLAGS) -c dropfz3.c -o drop_fz.o drop_tfz.o : dropfz3.c upam.h param.h rstruct.h defs.h aamap.h drop_func.h dyn_string.h $(CC) $(THR_CC) $(CFLAGS) -c -DTFAST dropfz3.c -o drop_tfz.o dropnsw.o : dropnsw.c upam.h param.h rstruct.h structs.h drop_func.h dyn_string.h $(CC) $(THR_CC) $(CFLAGS) -c dropnsw.c #dropgsw.o : dropgsw.c dropgsw.h defs.h param.h rstruct.h drop_func.h a_mark.h dyn_string.h # $(CC) $(THR_CC) $(CFLAGS) -c dropgsw.c -o dropgsw.o dropgsw2.o : dropgsw2.c dropgsw2.h defs.h param.h rstruct.h drop_func.h a_mark.h dyn_string.h $(CC) $(THR_CC) $(CFLAGS) -c dropgsw2.c -o dropgsw2.o dropgsw2_sse.o : dropgsw2.c dropgsw2.h defs.h param.h rstruct.h drop_func.h a_mark.h dyn_string.h $(CC) $(THR_CC) $(CFLAGS) -DSW_SSE2 -c dropgsw2.c -o dropgsw2_sse.o dropgsw2_alt.o : dropgsw2.c dropgsw2.h defs.h param.h rstruct.h drop_func.h a_mark.h dyn_string.h $(CC) $(THR_CC) $(CFLAGS) -DSW_ALTIVEC -c dropgsw2.c -o dropgsw2_alt.o droplal2.o : dropgsw2.c dropgsw2.h defs.h param.h rstruct.h drop_func.h a_mark.h dyn_string.h $(CC) $(THR_CC) -DLALIGN $(CFLAGS) -c dropgsw2.c -o droplal2.o droplal2_sse.o : dropgsw2.c dropgsw2.h defs.h param.h rstruct.h drop_func.h a_mark.h dyn_string.h $(CC) $(THR_CC) -DLALIGN $(CFLAGS) -DSW_SSE2 -c dropgsw2.c -o droplal2_sse.o droplal2_alt.o : dropgsw2.c dropgsw2.h defs.h param.h rstruct.h drop_func.h a_mark.h dyn_string.h $(CC) $(THR_CC) -DLALIGN $(CFLAGS) -DSW_ALTIVEC -c dropgsw2.c -o droplal2_alt.o lsim4.o : lsim4.c lsim4.h param.h rstruct.h defs.h $(CC) $(THR_CC) $(CFLAGS) -c lsim4.c smith_waterman_altivec.o : smith_waterman_altivec.c smith_waterman_altivec.h dropgsw2.h defs.h param.h rstruct.h $(CC) $(THR_CC) $(CFLAGS) -DSW_ALTIVEC -c smith_waterman_altivec.c smith_waterman_sse2.o : smith_waterman_sse2.c smith_waterman_sse2.h dropgsw2.h defs.h param.h rstruct.h $(CC) $(THR_CC) $(CFLAGS) -DSW_SSE2 -c smith_waterman_sse2.c global_sse2.o : global_sse2.c global_sse2.h dropgsw2.h defs.h param.h rstruct.h $(CC) $(THR_CC) $(CFLAGS) -DSW_SSE2 -c global_sse2.c glocal_sse2.o : glocal_sse2.c glocal_sse2.h dropgsw2.h defs.h param.h rstruct.h $(CC) $(THR_CC) $(CFLAGS) -DSW_SSE2 -c glocal_sse2.c droplnw.o : dropnnw2.c upam.h param.h rstruct.h structs.h drop_func.h dyn_string.h $(CC) $(THR_CC) $(CFLAGS) -c dropnnw2.c -o droplnw.o droplnw_sse.o : dropnnw2.c upam.h param.h rstruct.h structs.h drop_func.h dyn_string.h $(CC) $(THR_CC) -DSW_SSE2 $(CFLAGS) -c dropnnw2.c -o droplnw_sse.o dropgnw.o : dropnnw2.c upam.h param.h rstruct.h structs.h drop_func.h dyn_string.h $(CC) $(THR_CC) -DGLOBAL_GLOBAL $(CFLAGS) -c dropnnw2.c -o dropgnw.o dropgnw_sse.o : dropnnw2.c upam.h param.h rstruct.h structs.h drop_func.h dyn_string.h $(CC) $(THR_CC) -DGLOBAL_GLOBAL -DSW_SSE2 $(CFLAGS) -c dropnnw2.c -o dropgnw_sse.o lwm_align.o : wm_align.c defs.h param.h rstruct.h a_mark.h $(CC) $(THR_CC) $(CFLAGS) -c wm_align.c -o lwm_align.o gwm_align.o : wm_align.c defs.h param.h rstruct.h a_mark.h $(CC) $(THR_CC) $(CFLAGS) -DGGSEARCH -c wm_align.c -o gwm_align.o calcons_fa.o : cal_cons2.c defs.h param.h rstruct.h a_mark.h $(CC) $(THR_CC) $(CFLAGS) -DFASTA -c cal_cons2.c -o calcons_fa.o calcons_tfa.o : cal_cons2.c defs.h param.h rstruct.h a_mark.h $(CC) $(THR_CC) $(CFLAGS) -DTFASTA -c cal_cons2.c -o calcons_tfa.o calcons_sw.o : cal_cons2.c defs.h param.h rstruct.h a_mark.h $(CC) $(THR_CC) $(CFLAGS) -DSSEARCH -c cal_cons2.c -o calcons_sw.o calcons_la.o : cal_cons2.c defs.h param.h rstruct.h a_mark.h $(CC) $(THR_CC) -DLALIGN -DLCAL_CONS $(CFLAGS) -c cal_cons2.c -o calcons_la.o calcons_ff.o : cal_consf.c defs.h param.h rstruct.h a_mark.h $(CC) $(THR_CC) $(CFLAGS) -DFASTF -c cal_consf.c -o calcons_ff.o calcons_fs.o : cal_consf.c defs.h param.h rstruct.h a_mark.h $(CC) $(THR_CC) $(CFLAGS) -DFASTS -c cal_consf.c -o calcons_fs.o calcons_fm.o : cal_consf.c defs.h param.h rstruct.h a_mark.h $(CC) $(THR_CC) $(CFLAGS) -DFASTM -c cal_consf.c -o calcons_fm.o calcons_tff.o : cal_consf.c defs.h param.h rstruct.h a_mark.h $(CC) $(THR_CC) $(CFLAGS) -DTFAST -DFASTF -c cal_consf.c -o calcons_tff.o calcons_tfs.o : cal_consf.c defs.h param.h rstruct.h a_mark.h $(CC) $(THR_CC) $(CFLAGS) -DTFAST -DFASTS -c cal_consf.c -o calcons_tfs.o calcons_tfm.o : cal_consf.c defs.h param.h rstruct.h a_mark.h $(CC) $(THR_CC) $(CFLAGS) -DTFAST -DFASTM -c cal_consf.c -o calcons_tfm.o #================ reading query, libraries getseq.o : getseq.c defs.h uascii.h structs.h rstruct.h upam.h mm_file.h $(CC) $(THR_CC) $(CFLAGS) -c getseq.c llgetaa.o : llgetaa.c upam.h uascii.h mm_file.h $(CC) $(THR_CC) $(CFLAGS) -c -DNOLIB llgetaa.c lgetlib.o : $(NGETLIB).c altlib.h upam.h uascii.h mm_file.h $(CC) $(THR_CC) $(CFLAGS) -c $(NGETLIB).c -o lgetlib.o lgetaa_m.o : mmgetaa.c altlib.h ncbl2_head.h upam.h uascii.h mm_file.h $(CC) $(THR_CC) $(CFLAGS) -c mmgetaa.c -o lgetaa_m.o ncbl_lib.o : ncbl_lib.c ncbl_head.h $(CC) $(THR_CC) $(CFLAGS) -c ncbl_lib.c ncbl2_mlib.o : ncbl2_mlib.c ncbl2_head.h mm_file.h $(CC) $(THR_CC) $(CFLAGS) -c ncbl2_mlib.c -o ncbl2_mlib.o mysql_lib.o : mysql_lib.c mm_file.h $(CC) $(THR_CC) $(CFLAGS) -c mysql_lib.c pgsql_lib.o : pgsql_lib.c mm_file.h $(CC) $(THR_CC) $(CFLAGS) -c pgsql_lib.c #================ threading functions pthr_subs2.o : pthr_subs2.c thr_bufs2.h pthr_subs.h $(CC) $(THR_CC) $(CFLAGS) -c pthr_subs2.c uthr_subs.o : uthr_subs.c thr_bufs2.h uthr_subs.h $(CC) $(THR_CC) $(CFLAGS) -c uthr_subs.c #================ MPI worker function mpi_subs2.o : pcomp_subs2.c pcomp_bufs.h pcomp_bufs.h thr_buf_structs.h $(CC) -DMPI_SRC $(CFLAGS) -c pcomp_subs2.c -o mpi_subs2.o #================ translation faatran.o : faatran.c upam.h uascii.h $(CC) $(THR_CC) $(CFLAGS) -c faatran.c url_subs.o : url_subs.c structs.h param.h rstruct.h $(CC) $(THR_CC) $(CFLAGS) -c url_subs.c #================ lav plotting functions lav2plt.o : lav2plt.c lav_defs.h $(CC) $(CFLAGS) -c lav2plt.c lavplt_ps.o : lavplt_ps.c lav_defs.h $(CC) $(CFLAGS) -c lavplt_ps.c lavplt_svg.o : lavplt_svg.c lav_defs.h $(CC) $(CFLAGS) -c lavplt_svg.c fasta36-36.3.8i_14-Nov-2020/make/Makefile.freebsd000066400000000000000000000043251433453312700206570ustar00rootroot00000000000000# # Makefile for building fasta3 on FreeBSD # # Fernan Aguero - # we take care of doing variable assignment using the '?=' and '+=' # operators to preserve the value of variables if they are already # defined. In FreeBSD this happens when fasta3 is build from the port or # when the user has set these variables -- most notably CC and/or CFLAGS # -- in /etc/make.conf # Compiler executable, and optional flags CC?= gcc CFLAGS?= -g -O2 # your FASTA host FASTA_HOST?= "your_fasta_host" # common CFLAGS. These are the set of CFLAGS that are always used COMMON_CFLAGS= -DSHOWSIM -DUNIX -DTIMES -DHZ=100 -DMAX_WORKERS=2 \ -DTHR_EXIT=pthread_exit -DPROGRESS -DUSE_MMAP -D_REENTRANT \ -D_LARGE_FILE_SOURCE -D_FILE_OFFSET_BITS=64 -DUSE_FSEEKO \ -DHAS_INTTYPES -DSAMP_STATS # standard options, these will be added to the common CFLAGS if # selected below STANDARD_CFLAGS= -DSFCHAR="':'" -DFASTA_HOST='${FASTA_HOST}' \ -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -DPGM_DOC # options for superfamily validations, these will be added to the common # CFLAGS if selected below SUPERFAMILY_CFLAGS= -DSFCHAR="'|'" -DSUPERFAMNUM -DBIG_LIB64 # here we define CFLAGS to be the sum of common flags plus a subset of # optional flags that define our intended use. # The default standard flags are selected by default, although the user # can override this if s/he wants CFLAGS+= ${COMMON_CFLAGS} ${STANDARD_CFLAGS} BIN = ../bin XDIR = /usr/local/bin LIB_M+= -lm HFLAGS+= # FreeBSD users BEWARE! Different threading models ahead! # The threading model has changed along the way from FreeBSD-4 to # FreeBSD-6. If you're building fasta3 on your own, you will need to # adjust this accordingly. The default works in FreeBSD-6x (currently # the recommended major version for use in production). Or better yet, # use the biology/fasta3 port from the ports collection, which will use # the correct threading library for your OSVERSION THR_SUBS?= pthr_subs2 THR_LIBS?= -lpthread THR_CC?= # set up files for SSE2/Altivec acceleration # include ../make/Makefile.sse_alt # no acceleration # DROPGSW_O = $(DROPGSW_NA_O) DROPLAL_O = $(DROPLAL_NA_O) DROPGNW_O = $(DROPGNW_NA_O) DROPLNW_O = $(DROPLNW_NA_O) include ../make/Makefile36m.common fasta36-36.3.8i_14-Nov-2020/make/Makefile.hpux_it000066400000000000000000000030531433453312700207220ustar00rootroot00000000000000# # makefile for fasta3, fasta3_t # # flags for HP-UX # CC= cc -g -O2 +Onolimit -Wl,+pi,1M -Wl,+pd,1M -Wl,+mergeseg #CC = gcc -g -DDEBUG #CC=gcc -Wall -pedantic -ansi -g -O #CC= /usr/local/parasoft/bin.linux2/insure -g -DDEBUG # EBI uses the following with pgcc, -O3 does not work: # CC= pgcc -O2 -pipe -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer # this file works for x86 LINUX # use options below for superfamily validations #CFLAGS= -DSHOWSIM -DUNIX -DTIMES -DHZ=100 -DSFCHAR="'|'" -DMAX_WORKERS=2 -DTHR_EXIT=pthread_exit -DPROGRESS -DSUPERFAMNUM -DUSE_MMAP -DBIG_LIB64 -D_LARGE_FILE_SOURCE -DUSE_FSEEKO -D_FILE_OFFSET_BITS=64 -DHAS_INTTYPES -DSAMP_STATS # standard options CFLAGS= -DSHOWSIM -DUNIX -DTIMES -DHZ=100 -DSFCHAR="':'" -DMAX_WORKERS=2 -DTHR_EXIT=pthread_exit -DPROGRESS -DUSE_MMAP -DHAS_INTTYPES -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -DUSE_FSEEKO -DSAMP_STATS -DPGM_DOC # -I/usr/local/include/mysql -DMYSQL_DB # #(for mySQL databases) (also requires change to Makefile35.common) LIB_M = -lm #LIB_M = -L/usr/local/lib/mysql -lmysqlclient -lm # for mySQL databases HFLAGS= # for Linux THR_SUBS = pthr_subs2 THR_LIBS = -lpthread THR_CC = BIN = ../bin XDIR = /seqprg/bin # set up files for SSE2/Altivec acceleration # include ../make/Makefile.sse_alt # no acceleration # DROPGSW_O = $(DROPGSW_NA_O) DROPLAL_O = $(DROPLAL_NA_O) DROPGNW_O = $(DROPGNW_NA_O) DROPLNW_O = $(DROPLNW_NA_O) # renamed (fasta35) programs include ../make/Makefile36m.common # conventional (fasta3) names # include ../make/Makefile.common fasta36-36.3.8i_14-Nov-2020/make/Makefile.ibm000066400000000000000000000014561433453312700200160ustar00rootroot00000000000000# # makefile for fasta3, fasta3_t. Use makefile.pvm for pvcompxx. # CC= xlc_r -O3 -qarch=auto -qtune=auto -qcache=auto # for IBM with current pthreads CFLAGS= -DUNIX -DTIMES -DSFCHAR="':'" -DMAX_WORKERS=4 -DTHR_EXIT=pthread_exit -DPROGRESS -DIS_BIG_ENDIAN -DUSE_MMAP -DIBM_AIX -D_LARGE_FILES -DHAS_INTTYPES -D_LARGE_FILES -UMAXSEG -DSAMP_STATS -DPGM_DOC # consider -D_LARGE_FILE_API -D_LARGE_FILES for files > 2 GB LIB_M = -lm HFLAGS= THR_SUBS = pthr_subs2 THR_LIBS = -lpthreads THR_CC = BIN = ../bin XDIR = /seqprg/slib/bin # set up files for SSE2/Altivec acceleration # include ../make/Makefile.sse_alt # no acceleration # DROPGSW_O = $(DROPGSW_NA_O) DROPLAL_O = $(DROPLAL_NA_O) DROPGNW_O = $(DROPGNW_NA_O) DROPLNW_O = $(DROPLNW_NA_O) # renamed (fasta34) programs include ../make/Makefile36m.common fasta36-36.3.8i_14-Nov-2020/make/Makefile.linux000066400000000000000000000033151433453312700204020ustar00rootroot00000000000000# $ Id: $ # # makefile for fasta3, fasta3_t Use Makefile.mpi for fasta36_mpi # # This file is designed for 64-bit Linux systems using an X86 # architecture with SSE2 extensions. -D_LARGEFILE64_SOURCE and # -DBIG_LIB64 require a 64-bit linux system. # SSE2 extensions are used for ssearch35(_t) # # Use Makefile.linux32_sse2 for 32-bit linux x86 # SHELL=/bin/bash CC ?= gcc -g -O LIB_DB= #CC= gcc -pg -g -O -msse2 -ffast-math #CC = gcc -g -DDEBUG -msse2 #CC=gcc -Wall -pedantic -ansi -g -msse2 -DDEBUG # EBI uses the following with pgcc, -O3 does not work: # CC= pgcc -O2 -pipe -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer # this file works for x86 LINUX # standard options CFLAGS += -DSHOW_HELP -DSHOWSIM -DUNIX -DTIMES -DHZ=100 -DMAX_WORKERS=8 -DTHR_EXIT=pthread_exit -DM10_CONS -D_REENTRANT -DHAS_INTTYPES -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DUSE_FSEEKO -DSAMP_STATS -DPGM_DOC -DUSE_MMAP -D_LARGEFILE64_SOURCE -DBIG_LIB64 # -I/usr/include/mysql -DMYSQL_DB # -DSUPERFAMNUM -DSFCHAR="'|'" # #(for mySQL databases) (also requires change to Makefile36m.common or use of Makefile36m.common_mysql) # run 'mysql_config' so find locations of mySQL files LIB_M = -lm # for mySQL databases # LIB_M = -L/usr/lib64/mysql -lmysqlclient -lm HFLAGS= # for Linux THR_SUBS = pthr_subs2 THR_LIBS = -lpthread THR_CC = BIN = ../bin XDIR = /seqprg/bin #XDIR = ~/bin/LINUX # set up files for SSE2/Altivec acceleration # include ../make/Makefile.sse_alt # SSE2 acceleration # DROPGSW_O = $(DROPGSW_SSE_O) DROPLAL_O = $(DROPLAL_SSE_O) DROPGNW_O = $(DROPGNW_SSE_O) DROPLNW_O = $(DROPLNW_SSE_O) # renamed (fasta36) programs include ../make/Makefile36m.common # conventional (fasta3) names # include ../make/Makefile.common fasta36-36.3.8i_14-Nov-2020/make/Makefile.linux32000066400000000000000000000030011433453312700205370ustar00rootroot00000000000000# $ Id: $ # # makefile for fasta3, fasta3_t. Use makefile.pvm for pvcompxx. # # This file is designed for 32-bit Linux systems using an X86 # architecture without SSE2 extensions. # # To use on a 64-bit linux system, add -D_LARGEFILE64_SOURCE and -DBIG_LIB64 # (or use Makefile.linux64) # SHELL=/bin/bash CC= gcc -g -O #CC = gcc -g -DDEBUG #LIB_DB= #CC=gcc -Wall -pedantic -ansi -g -O #CC= /usr/local/parasoft/bin/insure -g -DDEBUG LIB_DB=-lz # EBI uses the following with pgcc, -O3 does not work: # CC= pgcc -O2 -pipe -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer # this file works for x86 LINUX # standard options CFLAGS= -DSHOW_HELP -DSHOWSIM -DUNIX -DTIMES -DHZ=100 -DMAX_WORKERS=4 -DTHR_EXIT=pthread_exit -DPROGRESS -DUSE_MMAP -D_REENTRANT -DHAS_INTTYPES -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DUSE_FSEEKO -DSAMP_STATS -DPGM_DOC # -DSFCHAR="'|'" -dSUPERFAMNUM # -I/usr/local/include/mysql -DMYSQL_DB # #(for mySQL databases) (also requires change to Makefile35.common) LIB_M = -lm #LIB_M = -L/usr/local/lib/mysql -lmysqlclient -lm # for mySQL databases HFLAGS= # for Linux THR_SUBS = pthr_subs2 THR_LIBS = -lpthread THR_CC = BIN = ../bin XDIR = /seqprg/bin # set up files for SSE2/Altivec acceleration # include ../make/Makefile.sse_alt # no acceleration # DROPGSW_O = $(DROPGSW_NA_O) DROPLAL_O = $(DROPLAL_NA_O) DROPGNW_O = $(DROPGNW_NA_O) DROPLNW_O = $(DROPLNW_NA_O) # renamed (fasta35) programs include ../make/Makefile36m.common # conventional (fasta3) names # include ../make/Makefile.common fasta36-36.3.8i_14-Nov-2020/make/Makefile.linux32_simde_arm000066400000000000000000000036441433453312700225740ustar00rootroot00000000000000# # $Id: Makefile.linux32_sse2 479 2011-01-12 13:13:03Z wrp $ # # makefile for fasta36/ssearch36. Use makefile.pvm for pvcompxx. # # This file is designed for 32-bit Linux systems using the ARM # architecture with NEON extensions by using the simde mapping of SSE2 to NEON # Using simde (vs non-vectorized) improves performance more than 10-fold # # This file has been tested on a Raspberry Pi4 system with 8 GB of # memory using the 32-bit Raspbian. as a result, it is difficult for # the fasta programs to access more than 4 GB of memory, and some # tests fail because this file does define -D SMALLMEM. # # To use on a 64-bit linux system, add -D_LARGEFILE64_SOURCE and -DBIG_LIB64 # (or use Makefile.linux64_sse2) # SHELL=/bin/bash CC= gcc -g -O3 -ffast-math -mcpu=cortex-a72 -mtune=cortex-a72 -mfpu=neon-fp-armv8 -mneon-for-64bits LIB_DB= #CC = gcc -g -DDEBUG -msse2 #CC= /usr/local/parasoft/bin/insure -g -DDEBUG #LIB_DB=-lz #CC=gcc -Wall -pedantic -ansi -g -O # this file works for Raspbian 32-bit # standard options CFLAGS= -DSHOWSIM -DUNIX -DTIMES -DHZ=100 -DMAX_WORKERS=8 -DTHR_EXIT=pthread_exit -DPROGRESS -D_REENTRANT -DHAS_INTTYPES -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DUSE_FSEEKO -DSAMP_STATS -DPGM_DOC -DUSE_MMAP # -DSUPERFAMNUM -DSFCHAR="'|'" # -I/usr/local/include/mysql -DMYSQL_DB # #(for mySQL databases) (also requires change to Makefile35.common) LIB_M = -lm #LIB_M = -L/usr/local/lib/mysql -lmysqlclient -lm # for mySQL databases HFLAGS= # for Linux THR_SUBS = pthr_subs2 THR_LIBS = -lpthread THR_CC = BIN = ../bin XDIR = /seqprg/bin #XDIR = ~/bin/LINUX # set up files for SSE2/Altivec acceleration # include ../make/Makefile.sse_alt # SSE2 acceleration # DROPGSW_O = $(DROPGSW_SSE_O) DROPLAL_O = $(DROPLAL_SSE_O) DROPGNW_O = $(DROPGNW_SSE_O) DROPLNW_O = $(DROPLNW_SSE_O) # renamed (fasta35) programs include ../make/Makefile36m.common # conventional (fasta3) names # include ../make/Makefile.common fasta36-36.3.8i_14-Nov-2020/make/Makefile.linux32_sse2000066400000000000000000000032011433453312700214750ustar00rootroot00000000000000# # $Id: Makefile.linux32_sse2 479 2011-01-12 13:13:03Z wrp $ # # makefile for fasta3, fasta3_t. Use makefile.pvm for pvcompxx. # # This file is designed for 32-bit Linux systems using an X86 # architecture with SSE2 extensions. SSE2 is used for ssearch35(_t) # # To use on a 64-bit linux system, add -D_LARGEFILE64_SOURCE and -DBIG_LIB64 # (or use Makefile.linux64_sse2) # SHELL=/bin/bash CC ?= gcc -g -O LIB_DB= #CC = gcc -g -DDEBUG -msse2 #CC= /usr/local/parasoft/bin/insure -g -DDEBUG #LIB_DB=-lz #CC=gcc -Wall -pedantic -ansi -g -O # EBI uses the following with pgcc, -O3 does not work: # CC= pgcc -O2 -pipe -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer # this file works for x86 LINUX # standard options CFLAGS += -ffast-math -DSHOWSIM -DUNIX -DTIMES -DHZ=100 -DMAX_WORKERS=8 -DTHR_EXIT=pthread_exit -DPROGRESS -D_REENTRANT -DHAS_INTTYPES -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DUSE_FSEEKO -DSAMP_STATS -DPGM_DOC -DUSE_MMAP # -DSUPERFAMNUM -DSFCHAR="'|'" # -I/usr/local/include/mysql -DMYSQL_DB # #(for mySQL databases) (also requires change to Makefile35.common) LIB_M = -lm #LIB_M = -L/usr/local/lib/mysql -lmysqlclient -lm # for mySQL databases HFLAGS= # for Linux THR_SUBS = pthr_subs2 THR_LIBS = -lpthread THR_CC = BIN = ../bin XDIR = /seqprg/bin #XDIR = ~/bin/LINUX # set up files for SSE2/Altivec acceleration # include ../make/Makefile.sse_alt # SSE2 acceleration # DROPGSW_O = $(DROPGSW_SSE_O) DROPLAL_O = $(DROPLAL_SSE_O) DROPGNW_O = $(DROPGNW_SSE_O) DROPLNW_O = $(DROPLNW_SSE_O) # renamed (fasta35) programs include ../make/Makefile36m.common # conventional (fasta3) names # include ../make/Makefile.common fasta36-36.3.8i_14-Nov-2020/make/Makefile.linux64000066400000000000000000000033441433453312700205560ustar00rootroot00000000000000# $ Id: $ # # makefile for fasta3, fasta3_t Use Makefile.mpi for fasta36_mpi # # This file is designed for 64-bit Linux systems using an X86 # architecture with SSE2 extensions. -D_LARGEFILE64_SOURCE and # -DBIG_LIB64 require a 64-bit linux system. # SSE2 extensions are used for ssearch35(_t) # # Use Makefile.linux32_sse2 for 32-bit linux x86 # SHELL=/bin/bash CC ?= gcc -g -O LIB_DB= #CC= gcc -pg -g -O -msse2 -ffast-math #CC = gcc -g -DDEBUG -msse2 #CC=gcc -Wall -pedantic -ansi -g -msse2 -DDEBUG # EBI uses the following with pgcc, -O3 does not work: # CC= pgcc -O2 -pipe -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer # this file works for x86 LINUX # standard options CFLAGS += -DSHOW_HELP -DSHOWSIM -DUNIX -DTIMES -DHZ=100 -DMAX_WORKERS=8 -DTHR_EXIT=pthread_exit -DM10_CONS -D_REENTRANT -DHAS_INTTYPES -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DUSE_FSEEKO -DSAMP_STATS -DPGM_DOC -DUSE_MMAP -D_LARGEFILE64_SOURCE -DBIG_LIB64 # -I/usr/include/mysql -DMYSQL_DB # -DSUPERFAMNUM -DSFCHAR="'|'" # #(for mySQL databases) (also requires change to Makefile36m.common or use of Makefile36m.common_mysql) # run 'mysql_config' so find locations of mySQL files LIB_M = -lm # for mySQL databases # LIB_M = -L/usr/lib64/mysql -lmysqlclient -lm HFLAGS= # for Linux THR_SUBS = pthr_subs2 THR_LIBS = -lpthread THR_CC = $(LDFLAGS) $(CPPFLAGS) BIN = ../bin XDIR = /seqprg/bin #XDIR = ~/bin/LINUX # set up files for SSE2/Altivec acceleration # include ../make/Makefile.sse_alt # SSE2 acceleration # DROPGSW_O = $(DROPGSW_SSE_O) DROPLAL_O = $(DROPLAL_SSE_O) DROPGNW_O = $(DROPGNW_SSE_O) DROPLNW_O = $(DROPLNW_SSE_O) # renamed (fasta36) programs include ../make/Makefile36m.common # conventional (fasta3) names # include ../make/Makefile.common fasta36-36.3.8i_14-Nov-2020/make/Makefile.linux64_simde_arm000066400000000000000000000034661433453312700226030ustar00rootroot00000000000000# $ Id: $ # # makefile for fasta3, fasta3_t Use Makefile.mpi for fasta36_mpi # # This file is designed for 64-bit Linux systems using an X86 # architecture with SSE2 extensions. -D_LARGEFILE64_SOURCE and # -DBIG_LIB64 require a 64-bit linux system. # SSE2 extensions are used for ssearch35(_t) # # Use Makefile.linux32_sse2 for 32-bit linux x86 # SHELL=/bin/bash CC = gcc -g -O -ffast-math -mcpu=cortex-a72 -mtune=cortex-a72 -mfpu=neon-fp-armv8 -mneon-for-64bits LIB_DB= #CC= gcc -pg -g -O -msse2 -ffast-math #CC = gcc -g -DDEBUG -msse2 #CC=gcc -Wall -pedantic -ansi -g -msse2 -DDEBUG # EBI uses the following with pgcc, -O3 does not work: # CC= pgcc -O2 -pipe -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer # this file works for x86 LINUX # standard options CFLAGS= -DSHOW_HELP -DSHOWSIM -DUNIX -DTIMES -DHZ=100 -DMAX_WORKERS=4 -DMAX_MEMK=2*1024*1024 -DTHR_EXIT=pthread_exit -DM10_CONS -D_REENTRANT -DHAS_INTTYPES -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DUSE_FSEEKO -DSAMP_STATS -DPGM_DOC -DUSE_MMAP -D_LARGEFILE64_SOURCE -DBIG_LIB64 # -I/usr/include/mysql -DMYSQL_DB # -DSUPERFAMNUM -DSFCHAR="'|'" # #(for mySQL databases) (also requires change to Makefile36m.common or use of Makefile36m.common_mysql) # run 'mysql_config' so find locations of mySQL files LIB_M = -lm # for mySQL databases # LIB_M = -L/usr/lib64/mysql -lmysqlclient -lm HFLAGS= # for Linux THR_SUBS = pthr_subs2 THR_LIBS = -lpthread THR_CC = BIN = ../bin XDIR = /seqprg/bin #XDIR = ~/bin/LINUX # set up files for SSE2/Altivec acceleration # include ../make/Makefile.sse_alt # SSE2 acceleration # DROPGSW_O = $(DROPGSW_SSE_O) DROPLAL_O = $(DROPLAL_SSE_O) DROPGNW_O = $(DROPGNW_SSE_O) DROPLNW_O = $(DROPLNW_SSE_O) # renamed (fasta36) programs include ../make/Makefile36m.common # conventional (fasta3) names # include ../make/Makefile.common fasta36-36.3.8i_14-Nov-2020/make/Makefile.linux64_sse2000066400000000000000000000034011433453312700215040ustar00rootroot00000000000000# $ Id: $ # # makefile for fasta3, fasta3_t Use Makefile.mpi for fasta36_mpi # # This file is designed for 64-bit Linux systems using an X86 # architecture with SSE2 extensions. -D_LARGEFILE64_SOURCE and # -DBIG_LIB64 require a 64-bit linux system. # SSE2 extensions are used for ssearch35(_t) # # Use Makefile.linux32_sse2 for 32-bit linux x86 # SHELL=/bin/bash CC ?= gcc CFLAGS += -g -std=c99 -O $(CPPFLAGS) LIB_DB= #CC= gcc -pg -g -O -msse2 -ffast-math #CC = gcc -g -DDEBUG -msse2 #CC=gcc -Wall -pedantic -ansi -g -msse2 -DDEBUG # EBI uses the following with pgcc, -O3 does not work: # CC= pgcc -O2 -pipe -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer # this file works for x86 LINUX # standard options CFLAGS += -DPOSIX_C_SOURCE=2 -DSHOW_HELP -DSHOWSIM -DUNIX -DTIMES -DHZ=100 -DMAX_WORKERS=8 -DTHR_EXIT=pthread_exit -DM10_CONS -D_REENTRANT -DHAS_INTTYPES -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DUSE_FSEEKO -DSAMP_STATS -DPGM_DOC -DUSE_MMAP -D_LARGEFILE64_SOURCE -DBIG_LIB64 # -I/usr/include/mysql -DMYSQL_DB # -DSUPERFAMNUM -DSFCHAR="'|'" # #(for mySQL databases) (also requires change to Makefile36m.common or use of Makefile36m.common_mysql) # run 'mysql_config' so find locations of mySQL files LIB_M = -lm # for mySQL databases # LIB_M = -L/usr/lib64/mysql -lmysqlclient -lm HFLAGS= # for Linux THR_SUBS = pthr_subs2 THR_LIBS = -lpthread THR_CC = BIN = ../bin XDIR = /seqprg/bin #XDIR = ~/bin/LINUX # set up files for SSE2/Altivec acceleration # include ../make/Makefile.sse_alt # SSE2 acceleration # DROPGSW_O = $(DROPGSW_SSE_O) DROPLAL_O = $(DROPLAL_SSE_O) DROPGNW_O = $(DROPGNW_SSE_O) DROPLNW_O = $(DROPLNW_SSE_O) # renamed (fasta36) programs include ../make/Makefile36m.common # conventional (fasta3) names # include ../make/Makefile.common fasta36-36.3.8i_14-Nov-2020/make/Makefile.linux_icc000066400000000000000000000027471433453312700212300ustar00rootroot00000000000000# $Id: Makefile.linux_icc 499 2011-01-28 10:20:04Z wrp $ # # makefile for fasta3, fasta3_t using the Intel icc compiler # # This file is designed for 64-bit Linux systems. # -D_LARGEFILE64_SOURCE and # -DBIG_LIB64 require a 64-bit linux system. SHELL=/bin/bash CC= icc -g -O3 LIB_DB= #CC = icc -g -DDEBUG #LIB_DB=-lz #CC=gcc -Wall -pedantic -ansi -g -O #CC= /usr/local/parasoft/bin/insure -g -DDEBUG # EBI uses the following with pgcc, -O3 does not work: # CC= pgcc -O2 -pipe -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer # this file works for x86 LINUX # standard options CFLAGS= -DSHOWSIM -DUNIX -DTIMES -DHZ=100 -DMAX_WORKERS=8 -DTHR_EXIT=pthread_exit -DFASTA_HOST='"your_fasta_host_here"' -DUSE_MMAP -D_REENTRANT -DHAS_INTTYPES -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -DUSE_FSEEKO -DPGM_DOC -DBIG_LIB64 -DSAMP_STATS # -I/usr/local/include/mysql -DMYSQL_DB # #(for mySQL databases) (also requires change to Makefile36.common) LIB_M = -lm #LIB_M = -L/usr/local/lib/mysql -lmysqlclient -lm # for mySQL databases HFLAGS= # for Linux THR_SUBS = pthr_subs2 THR_LIBS = -lpthread THR_CC = BIN = ../bin XDIR = /seqprg/bin # set up files for SSE2/Altivec acceleration # include ../make/Makefile.sse_alt # no acceleration # DROPGSW_O = $(DROPGSW_NA_O) DROPLAL_O = $(DROPLAL_NA_O) DROPGNW_O = $(DROPGNW_NA_O) DROPLNW_O = $(DROPLNW_NA_O) # renamed (fasta36) programs include ../make/Makefile36m.common # conventional (fasta3) names # include ../make/Makefile.common fasta36-36.3.8i_14-Nov-2020/make/Makefile.linux_icc_sse2000066400000000000000000000026321433453312700221550ustar00rootroot00000000000000 # $Id: Makefile.linux_icc_sse2 1162 2013-05-27 16:48:11Z wrp $ # # makefile for fasta3, fasta3_t using the Intel icc compiler # # This file is designed for 64-bit Linux systems. # -D_LARGEFILE64_SOURCE and # -DBIG_LIB64 require a 64-bit linux system. # # uses SSE2 extensions for ssearch36(_t) SHELL=/bin/bash CC= icc -std=c99 -O3 -g -pthread LIB_DB= #CC = icc -g -DDEBUG #LIB_DB=-lz #CC=gcc -Wall -pedantic -ansi -g -O #CC= /usr/local/parasoft/bin/insure -g -DDEBUG # this file works for x86 LINUX # standard options CFLAGS= -D_POSIX_C_SOURCE=2 -DSHOW_HELP -DSHOWSIM -DUNIX -DTIMES -DHZ=100 -DMAX_WORKERS=8 -DTHR_EXIT=pthread_exit -DUSE_MMAP -D_REENTRANT -DHAS_INTTYPES -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -DUSE_FSEEKO -DPGM_DOC -DBIG_LIB64 -DSAMP_STATS # -I/usr/include/mysql -DMYSQL_DB #(for mySQL databases) (also requires change to Makefile36.common) LIB_M = -lm #LIB_M = -L/usr/local/lib/mysql -lmysqlclient -lm # for mySQL databases HFLAGS= # for Linux THR_SUBS = pthr_subs2 THR_LIBS = -lpthread THR_CC = BIN = ../bin XDIR = /seqprg/bin # set up files for SSE2/Altivec acceleration # include ../make/Makefile.sse_alt # no acceleration # DROPGSW_O = $(DROPGSW_SSE_O) DROPLAL_O = $(DROPLAL_SSE_O) DROPGNW_O = $(DROPGNW_SSE_O) DROPLNW_O = $(DROPLNW_SSE_O) # renamed (fasta36) programs include ../make/Makefile36m.common # conventional (fasta3) names # include ../make/Makefile.common fasta36-36.3.8i_14-Nov-2020/make/Makefile.linux_mariadb000066400000000000000000000030771433453312700220660ustar00rootroot00000000000000# $ Id: $ # makefile for fasta3, fasta3_t. Use makefile.pvm for pvcompxx. # # Includes files for reading mysql databases # # This file is designed for 64-bit Linux systems # -D_LARGEFILE64_SOURCE and -DBIG_LIB64 require a 64-bit linux system. # This makefile does not use SSE2 extensions. # SHELL=/bin/bash CC= gcc -g -O2 LIB_DB= #CC= gcc -g -DDEBUG #LIB_DB=-lz # this file works for x86 LINUX # standard options CFLAGS= -DSHOWSIM -DUNIX -DTIMES -DHZ=100 -DSFCHAR="':'" -DMAX_WORKERS=2 -DTHR_EXIT=pthread_exit -DFASTA_HOST='"your_fasta_host_here"' -DUSE_MMAP -D_REENTRANT -I/usr/include/mariadb -DMYSQL_DB -D_FILE_OFFSET_BITS=64 -DUSE_FSEEKO -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DHAS_INTTYPES -DSAMP_STATS -DPGM_DOC -DM10_CONS -DBIG_LIB64 # use options below for superfamily validations #CFLAGS= -DSHOWSIM -DUNIX -DTIMES -DHZ=100 -DSFCHAR="'|'" -DMAX_WORKERS=2 -DTHR_EXIT=pthread_exit -DPROGRESS -DSUPERFAMNUM -DUSE_MMAP -D_REENTRANT # -I/usr/local/include/mysql -DMYSQL_DB # #(for mySQL databases) (also requires change to Makefile35.common) #LIB_M = -lm #LIB_M = -L/usr/lib/mysql -lmysqlclient -lm # for mySQL databases HFLAGS= # for Linux THR_SUBS = pthr_subs2 THR_LIBS = -lpthread THR_CC = BIN = ../bin XDIR = /seqprg/bin # set up files for SSE2/Altivec acceleration # include ../make/Makefile.sse_alt # no acceleration # DROPGSW_O = $(DROPGSW_NA_O) DROPLAL_O = $(DROPLAL_NA_O) DROPGNW_O = $(DROPGNW_NA_O) DROPLNW_O = $(DROPLNW_NA_O) # renamed (fasta36) programs include ../make/Makefile36m.common_mariadb # conventional (fasta3) names # include ../make/Makefile.common fasta36-36.3.8i_14-Nov-2020/make/Makefile.linux_mysql000066400000000000000000000030731433453312700216300ustar00rootroot00000000000000# $ Id: $ # makefile for fasta3, fasta3_t. Use makefile.pvm for pvcompxx. # # Includes files for reading mysql databases # # This file is designed for 64-bit Linux systems # -D_LARGEFILE64_SOURCE and -DBIG_LIB64 require a 64-bit linux system. # This makefile does not use SSE2 extensions. # SHELL=/bin/bash CC= gcc -g -O2 LIB_DB= #CC= gcc -g -DDEBUG #LIB_DB=-lz # this file works for x86 LINUX # standard options CFLAGS= -DSHOWSIM -DUNIX -DTIMES -DHZ=100 -DSFCHAR="':'" -DMAX_WORKERS=2 -DTHR_EXIT=pthread_exit -DFASTA_HOST='"your_fasta_host_here"' -DUSE_MMAP -D_REENTRANT -I/usr/include/mysql -DMYSQL_DB -D_FILE_OFFSET_BITS=64 -DUSE_FSEEKO -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DHAS_INTTYPES -DSAMP_STATS -DPGM_DOC -DM10_CONS -DBIG_LIB64 # use options below for superfamily validations #CFLAGS= -DSHOWSIM -DUNIX -DTIMES -DHZ=100 -DSFCHAR="'|'" -DMAX_WORKERS=2 -DTHR_EXIT=pthread_exit -DPROGRESS -DSUPERFAMNUM -DUSE_MMAP -D_REENTRANT # -I/usr/local/include/mysql -DMYSQL_DB # #(for mySQL databases) (also requires change to Makefile35.common) #LIB_M = -lm #LIB_M = -L/usr/lib/mysql -lmysqlclient -lm # for mySQL databases HFLAGS= # for Linux THR_SUBS = pthr_subs2 THR_LIBS = -lpthread THR_CC = BIN = ../bin XDIR = /seqprg/bin # set up files for SSE2/Altivec acceleration # include ../make/Makefile.sse_alt # no acceleration # DROPGSW_O = $(DROPGSW_NA_O) DROPLAL_O = $(DROPLAL_NA_O) DROPGNW_O = $(DROPGNW_NA_O) DROPLNW_O = $(DROPLNW_NA_O) # renamed (fasta34) programs include ../make/Makefile36m.common_mysql # conventional (fasta3) names # include ../make/Makefile.common fasta36-36.3.8i_14-Nov-2020/make/Makefile.linux_pgsql000066400000000000000000000031161433453312700216070ustar00rootroot00000000000000# $ Id: $ # # makefile for fasta3, fasta3_t. Use makefile.pvm for pvcompxx. # # Includes files for reading postgres (pgsql) databases # # This file is designed for 64-bit Linux systems. # -D_LARGEFILE64_SOURCE and -DBIG_LIB64 require a 64-bit linux system. # SHELL=/bin/bash CC= gcc -g -O LIB_DB= #CC= gcc -g -DDEBUG #LIB_DB=-lz #CC=/opt/parasoft/bin.linux2/insure -g -DDEBUG # this file works for x86 LINUX # standard options CFLAGS= -DSHOWSIM -DUNIX -DTIMES -DHZ=100 -DSFCHAR="':'" -DMAX_WORKERS=2 -DTHR_EXIT=pthread_exit -DFASTA_HOST='"your_fasta_host_here"' -DUSE_MMAP -D_REENTRANT -I/usr/include/postgresql -DPGSQL_DB -D_FILE_OFFSET_BITS=64 -DUSE_FSEEKO -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DHAS_INTTYPES -DSAMP_STATS -DPGM_DOC -DM10_CONS -DBIG_LIB64 # use options below for superfamily validations #CFLAGS= -DSHOWSIM -DUNIX -DTIMES -DHZ=100 -DSFCHAR="'|'" -DMAX_WORKERS=2 -DTHR_EXIT=pthread_exit -DPROGRESS -DSUPERFAMNUM -DUSE_MMAP -D_REENTRANT # -I/usr/local/include/mysql -DMYSQL_DB # #(for mySQL databases) (also requires change to Makefile35.common) #LIB_M = -lm #LIB_M = -L/usr/lib/mysql -lmysqlclient -lm # for mySQL databases HFLAGS= # for Linux THR_SUBS = pthr_subs2 THR_LIBS = -lpthread THR_CC = BIN = ../bin XDIR = /seqprg/bin # set up files for SSE2/Altivec acceleration # include ../make/Makefile.sse_alt # no acceleration # DROPGSW_O = $(DROPGSW_NA_O) DROPLAL_O = $(DROPLAL_NA_O) DROPGNW_O = $(DROPGNW_NA_O) DROPLNW_O = $(DROPLNW_NA_O) # renamed (fasta36) programs include ../make/Makefile36m.common_pgsql # conventional (fasta3) names # include ../make/Makefile.common fasta36-36.3.8i_14-Nov-2020/make/Makefile.linux_sql000066400000000000000000000032151433453312700212600ustar00rootroot00000000000000# $ Id: $ # # makefile for fasta3, fasta3_t. Use makefile.pvm for pvcompxx. # # Includes files for reading MySQL and Postgres (pgsql) databases # # This file is designed for 64-bit Linux systems. # -D_LARGEFILE64_SOURCE and -DBIG_LIB64 require a 64-bit linux system. # SHELL=/bin/bash CC= gcc -g -O LIB_DB= #CC= gcc -g -DDEBUG #LIB_DB=-lz #CC=/opt/parasoft/bin.linux2/insure -g -DDEBUG # this file works for x86 LINUX # standard options CFLAGS= -DSHOWSIM -DUNIX -DTIMES -DHZ=100 -DSFCHAR="':'" -DMAX_WORKERS=2 -DTHR_EXIT=pthread_exit -DFASTA_HOST='"your_fasta_host_here"' -DUSE_MMAP -D_REENTRANT -I/usr/local/pgsql/include -I/usr/include/mysql -DPGSQL_DB -DMYSQL_DB -D_FILE_OFFSET_BITS=64 -DUSE_FSEEKO -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DHAS_INTTYPES -DSAMP_STATS -DPGM_DOC -DM10_CONS -DBIG_LIB64 # use options below for superfamily validations #CFLAGS= -DSHOWSIM -DLINUX6 -DUNIX -DTIMES -DHZ=100 -DSFCHAR="'|'" -DMAX_WORKERS=2 -DTHR_EXIT=pthread_exit -DPROGRESS -DSUPERFAMNUM -DUSE_MMAP -D_REENTRANT # -I/usr/local/include/mysql -DMYSQL_DB # #(for mySQL databases) (also requires change to Makefile35.common) #LIB_M = -lm #LIB_M = -L/usr/lib/mysql -lmysqlclient -lm # for mySQL databases HFLAGS= -o NFLAGS= -o # for Linux THR_SUBS = pthr_subs2 THR_LIBS = -lpthread THR_CC = BIN = ../bin XDIR = /seqprg/bin # set up files for SSE2/Altivec acceleration # include ../make/Makefile.sse_alt # no acceleration # DROPGSW_O = $(DROPGSW_NA_O) DROPLAL_O = $(DROPLAL_NA_O) DROPGNW_O = $(DROPGNW_NA_O) DROPLNW_O = $(DROPLNW_NA_O) # renamed (fasta34) programs include ../make/Makefile36m.common_sql # conventional (fasta3) names # include ../make/Makefile.common fasta36-36.3.8i_14-Nov-2020/make/Makefile.linux_sse2000066400000000000000000000033211433453312700213330ustar00rootroot00000000000000# $ Id: $ # # makefile for fasta3, fasta3_t Use Makefile.mpi for fasta36_mpi # # This file is designed for 64-bit Linux systems using an X86 # architecture with SSE2 extensions. -D_LARGEFILE64_SOURCE and # -DBIG_LIB64 require a 64-bit linux system. # SSE2 extensions are used for ssearch35(_t) # # Use Makefile.linux32_sse2 for 32-bit linux x86 # SHELL=/bin/bash CC = gcc -g -O -msse2 LIB_DB= #CC= gcc -pg -g -O -msse2 -ffast-math #CC = gcc -g -DDEBUG -msse2 #CC=gcc -Wall -pedantic -ansi -g -msse2 -DDEBUG # EBI uses the following with pgcc, -O3 does not work: # CC= pgcc -O2 -pipe -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer # this file works for x86 LINUX # standard options CFLAGS= -DSHOW_HELP -DSHOWSIM -DUNIX -DTIMES -DHZ=100 -DMAX_WORKERS=8 -DTHR_EXIT=pthread_exit -DM10_CONS -D_REENTRANT -DHAS_INTTYPES -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DUSE_FSEEKO -DSAMP_STATS -DPGM_DOC -DUSE_MMAP -D_LARGEFILE64_SOURCE -DBIG_LIB64 # -I/usr/include/mysql -DMYSQL_DB # -DSUPERFAMNUM -DSFCHAR="'|'" # #(for mySQL databases) (also requires change to Makefile36m.common or use of Makefile36m.common_mysql) # run 'mysql_config' so find locations of mySQL files LIB_M = -lm # for mySQL databases # LIB_M = -L/usr/lib64/mysql -lmysqlclient -lm HFLAGS= # for Linux THR_SUBS = pthr_subs2 THR_LIBS = -lpthread THR_CC = BIN = ../bin XDIR = /seqprg/bin #XDIR = ~/bin/LINUX # set up files for SSE2/Altivec acceleration # include ../make/Makefile.sse_alt # SSE2 acceleration # DROPGSW_O = $(DROPGSW_SSE_O) DROPLAL_O = $(DROPLAL_SSE_O) DROPGNW_O = $(DROPGNW_SSE_O) DROPLNW_O = $(DROPLNW_SSE_O) # renamed (fasta36) programs include ../make/Makefile36m.common # conventional (fasta3) names # include ../make/Makefile.common fasta36-36.3.8i_14-Nov-2020/make/Makefile.mp_com2000066400000000000000000000265421433453312700206060ustar00rootroot00000000000000 # combinations of files for "composite" drop* functions # DROPLNW_O = droplnw.o wm_align.o calcons_sw.o DROPGNW_O = dropgnw.o wm_align.o calcons_sw.o DROPNSW_O = dropnsw.o wm_align.o calcons_sw.o DROPNFA_O = drop_nfa.o wm_align.o calcons_fa.o DROPBD_O = dropsbd.o wm_align.o calcons_fa.o DROPTFA_O = drop_tfa.o DROPFF_O = drop_ff2.o calcons_ff.o DROPFS_O = drop_fs2.o calcons_fs.o DROPFM_O = drop_fm.o calcons_fm.o DROPTFF_O = drop_tff.o calcons_tff.o DROPTFS_O = drop_tfs.o calcons_tfs.o DROPTFM_O = drop_tfm.o calcons_tfm.o COMPACC_TO = compacc2_t.o # used with comp_lib5e.c/comp_lib7e.c/comp_lib8.c COMPACC_SO = compacc2_s.o COMPACC_PO = compacc2_p.o SHOWBESTC = mshowbest.c SHOWBESTO = showbest.o build_ares.o SHOWALIGN = mshowalign2 SHOWALIGN_P = mshowalign2_p SHOWALIGN_S = mshowalign2_s SHOWALIGN_T = mshowalign2_t LSHOWALIGN = lshowalign MWH = mw.h MWHP = mw.h MP_PROGS = ssearch36_mpi fasta36_mpi fasts36_mpi fastx36_mpi tfastx36_mpi fasty36_mpi tfasty36_mpi tfasts36_mpi fastm36_mpi fastf36_mpi tfastf36_mpi glsearch36_mpi ggsearch36_mpi PROGS = $(MP_PROGS) all: $(PROGS) clean-up: rm -f *.o $(PROGS); rm -rf $(BIN)/* install: $(PROGS) pushd $(BIN); cp $(PROGS) $(XDIR); popd ssearch36_mpi : $(COMP_THRO) ${WORK_THR_O} $(THR_SUBS).o ${COMPACC_PO} $(SHOWBESTO) re_getlib.o $(SHOWALIGN_P).o htime.o apam.o mpi_doinit.o scale_se.o karlin.o $(DROPGSW_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(CC) $(HFLAGS) -o $(BIN)/ssearch36_mpi $(COMP_THRO) ${WORK_THR_O} $(THR_SUBS).o ${COMPACC_PO} $(SHOWBESTO) re_getlib.o $(SHOWALIGN_P).o htime.o apam.o mpi_doinit.o $(DROPGSW_O) scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(LIB_M) $(THR_LIBS) ssearch36s_mpi : $(COMP_THRO) ${WORK_THR_O} $(THR_SUBS).o ${COMPACC_PO} $(SHOWBESTO) re_getlib.o $(SHOWALIGN_P).o htime.o apam.o mpi_doinit.o scale_se.o karlin.o $(DROPGSW_NA_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(CC) $(HFLAGS) -o $(BIN)/ssearch36s_mpi $(COMP_THRO) ${WORK_THR_O} $(THR_SUBS).o ${COMPACC_PO} $(SHOWBESTO) re_getlib.o $(SHOWALIGN_P).o htime.o apam.o mpi_doinit.o $(DROPGSW_NA_O) scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(LIB_M) $(THR_LIBS) glsearch36_mpi : $(COMP_THRO) ${WORK_THR_O} $(THR_SUBS).o ${COMPACC_PO} $(SHOWBESTO) re_getlib.o $(SHOWALIGN_P).o htime.o apam.o mpi_doinit.o init_lnw.o scale_sn.o karlin.o $(DROPLNW_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(CC) $(HFLAGS) -o $(BIN)/glsearch36_mpi $(COMP_THRO) ${WORK_THR_O} $(THR_SUBS).o ${COMPACC_PO} $(SHOWBESTO) re_getlib.o $(SHOWALIGN_P).o htime.o apam.o mpi_doinit.o init_lnw.o $(DROPLNW_O) scale_sn.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(LIB_M) $(THR_LIBS) glsearch36s_mpi : $(COMP_THRO) ${WORK_THR_O} $(THR_SUBS).o ${COMPACC_PO} showsum.o re_getlib.o $(SHOWALIGN_P).o htime.o apam.o mpi_doinit.o init_lnw.o scale_sn.o karlin.o $(DROPLNW_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(CC) $(HFLAGS) -o $(BIN)/glsearch36s_mpi $(COMP_THRO) ${WORK_THR_O} $(THR_SUBS).o ${COMPACC_PO} showsum.o re_getlib.o $(SHOWALIGN_P).o htime.o apam.o mpi_doinit.o init_lnw.o $(DROPLNW_O) scale_sn.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(LIB_M) $(THR_LIBS) ggsearch36_mpi : $(COMP_THRO) ${WORK_THR_O} $(THR_SUBS).o ${COMPACC_PO} $(SHOWBESTO) re_getlib.o $(SHOWALIGN_P).o htime.o apam.o mpi_doinit.o init_gnw.o scale_sn.o karlin.o $(DROPGNW_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(CC) $(HFLAGS) -o $(BIN)/ggsearch36_mpi $(COMP_THRO) ${WORK_THR_O} $(THR_SUBS).o ${COMPACC_PO} $(SHOWBESTO) re_getlib.o $(SHOWALIGN_P).o htime.o apam.o mpi_doinit.o init_gnw.o $(DROPGNW_O) scale_sn.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(LIB_M) $(THR_LIBS) fasta36_mpi : $(COMP_THRO) $(WORK_THR_O) $(THR_SUBS).o ${COMPACC_PO} $(SHOWBESTO) re_getlib.o $(SHOWALIGN_P).o htime.o apam.o mpi_doinit.o init_fa.o scale_se.o karlin.o $(DROPNFA_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o $(CC) $(HFLAGS) -o $(BIN)/fasta36_mpi $(COMP_THRO) $(WORK_THR_O) $(THR_SUBS).o ${COMPACC_PO} $(SHOWBESTO) re_getlib.o $(SHOWALIGN_P).o htime.o apam.o mpi_doinit.o init_fa.o $(DROPNFA_O) scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o $(LIB_M) $(THR_LIBS) fastf36_mpi : $(COMP_THRO) $(WORK_THR_O) $(THR_SUBS).o ${COMPACC_PO} $(SHOWBESTO) re_getlib.o $(SHOWALIGN_P).o htime.o apam.o mpi_doinit.o init_ff.o scaleswtf.o last_tat.o tatstats_ff.o karlin.o $(DROPFF_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(CC) $(HFLAGS) -o $(BIN)/fastf36_mpi $(COMP_THRO) $(WORK_THR_O) $(THR_SUBS).o ${COMPACC_PO} $(SHOWBESTO) re_getlib.o $(SHOWALIGN_P).o htime.o apam.o mpi_doinit.o init_ff.o $(DROPFF_O) scaleswtf.o last_tat.o tatstats_ff.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(LIB_M) $(THR_LIBS) fastf36s_mpi : $(COMP_THRO) $(WORK_THR_O) $(THR_SUBS).o ${COMPACC_PO} showsum.o $(SHOWALIGN_P).o htime.o apam.o mpi_doinit.o init_ff.o scaleswtf.o karlin.o $(DROPFF_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(CC) $(HFLAGS) -o $(BIN)/fastf36s_mpi $(COMP_THRO) $(WORK_THR_O) $(THR_SUBS).o ${COMPACC_PO} showsum.o $(SHOWALIGN_P).o htime.o apam.o mpi_doinit.o init_ff.o $(DROPFF_O) scaleswtf.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(LIB_M) $(THR_LIBS) fasts36_mpi : $(COMP_THRO) $(WORK_THR_O) $(THR_SUBS).o ${COMPACC_PO} $(SHOWBESTO) re_getlib.o $(SHOWALIGN_P).o htime.o apam.o mpi_doinit.o init_fs.o scaleswts.o last_tat.o tatstats_fs.o karlin.o $(DROPFS_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(CC) $(HFLAGS) -o $(BIN)/fasts36_mpi $(COMP_THRO) $(WORK_THR_O) $(THR_SUBS).o ${COMPACC_PO} $(SHOWBESTO) re_getlib.o $(SHOWALIGN_P).o htime.o apam.o mpi_doinit.o init_fs.o $(DROPFS_O) scaleswts.o last_tat.o tatstats_fs.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(LIB_M) $(THR_LIBS) fastm36_mpi : $(COMP_THRO) $(WORK_THR_O) $(THR_SUBS).o ${COMPACC_PO} $(SHOWBESTO) re_getlib.o $(SHOWALIGN_P).o htime.o apam.o mpi_doinit.o init_fs.o scaleswts.o last_tat.o tatstats_fm.o karlin.o $(DROPFM_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(CC) $(HFLAGS) -o $(BIN)/fastm36_mpi $(COMP_THRO) $(WORK_THR_O) $(THR_SUBS).o ${COMPACC_PO} $(SHOWBESTO) re_getlib.o $(SHOWALIGN_P).o htime.o apam.o mpi_doinit.o init_fs.o $(DROPFM_O) scaleswts.o last_tat.o tatstats_fm.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(LIB_M) $(THR_LIBS) fastx36_mpi : $(COMP_THRO) $(WORK_THRX_O) $(THR_SUBS).o ${COMPACC_PO} $(SHOWBESTO) re_getlib.o $(SHOWALIGN_P).o c_dispn.o htime.o apam.o mpi_doinit.o init_fx.o faatran.o scale_se.o karlin.o drop_fx.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o $(CC) $(HFLAGS) -o $(BIN)/fastx36_mpi $(COMP_THRO) $(WORK_THRX_O) $(THR_SUBS).o ${COMPACC_PO} $(SHOWBESTO) re_getlib.o $(SHOWALIGN_P).o htime.o apam.o mpi_doinit.o init_fx.o drop_fx.o faatran.o scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o $(LIB_M) $(THR_LIBS) fasty36_mpi : $(COMP_THRO) $(WORK_THRX_O) $(THR_SUBS).o ${COMPACC_PO} $(SHOWBESTO) re_getlib.o $(SHOWALIGN_P).o c_dispn.o htime.o apam.o mpi_doinit.o init_fy.o faatran.o scale_se.o karlin.o drop_fz.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o $(CC) $(HFLAGS) -o $(BIN)/fasty36_mpi $(COMP_THRO) $(WORK_THRX_O) $(THR_SUBS).o ${COMPACC_PO} $(SHOWBESTO) re_getlib.o $(SHOWALIGN_P).o htime.o apam.o mpi_doinit.o init_fy.o drop_fz.o faatran.o scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o $(LIB_M) $(THR_LIBS) tfastf36_mpi : $(COMP_THRO) $(WORK_THRX_O) $(THR_SUBS).o ${COMPACC_PO} $(SHOWBESTO) re_getlib.o $(SHOWALIGN_P).o c_dispn.o htime.o apam.o mpi_doinit.o init_tf.o scaleswtf.o last_tat.o tatstats_ff.o karlin.o $(DROPTFF_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o mrandom.o url_subs.o $(CC) $(HFLAGS) -o $(BIN)/tfastf36_mpi $(COMP_THRO) $(WORK_THRX_O) $(THR_SUBS).o ${COMPACC_PO} $(SHOWBESTO) re_getlib.o $(SHOWALIGN_P).o htime.o apam.o mpi_doinit.o init_tf.o $(DROPTFF_O) scaleswtf.o last_tat.o tatstats_ff.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o mrandom.o url_subs.o $(LIB_M) $(THR_LIBS) tfasts36_mpi : $(COMP_THRO) $(WORK_THRX_O) $(THR_SUBS).o ${COMPACC_PO} $(SHOWBESTO) re_getlib.o $(SHOWALIGN_P).o c_dispn.o htime.o apam.o mpi_doinit.o init_tfs.o scaleswts.o last_tat.o tatstats_fs.o karlin.o $(DROPTFS_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o mrandom.o url_subs.o $(CC) $(HFLAGS) -o $(BIN)/tfasts36_mpi $(COMP_THRO) $(WORK_THRX_O) $(THR_SUBS).o ${COMPACC_PO} $(SHOWBESTO) re_getlib.o $(SHOWALIGN_P).o htime.o apam.o mpi_doinit.o init_tfs.o $(DROPTFS_O) scaleswts.o last_tat.o tatstats_fs.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o mrandom.o url_subs.o $(LIB_M) $(THR_LIBS) tfastx36_mpi : $(COMP_THRO) $(WORK_THRX_O) $(THR_SUBS).o ${COMPACC_PO} $(SHOWBESTO) re_getlib.o $(SHOWALIGN_P).o htime.o apam.o mpi_doinit.o init_tfx.o scale_se.o karlin.o drop_tfx.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o url_subs.o mrandom.o $(CC) $(HFLAGS) -o $(BIN)/tfastx36_mpi $(COMP_THRO) $(WORK_THRX_O) $(THR_SUBS).o ${COMPACC_PO} $(SHOWBESTO) re_getlib.o $(SHOWALIGN_P).o htime.o apam.o mpi_doinit.o init_tfx.o drop_tfx.o scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o url_subs.o mrandom.o $(LIB_M) $(THR_LIBS) tfasty36_mpi : $(COMP_THRO) $(WORK_THRX_O) $(THR_SUBS).o ${COMPACC_PO} $(SHOWBESTO) re_getlib.o $(SHOWALIGN_P).o htime.o apam.o mpi_doinit.o init_tfy.o scale_se.o karlin.o drop_tfz.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o url_subs.o mrandom.o $(CC) $(HFLAGS) -o $(BIN)/tfasty36_mpi $(COMP_THRO) $(WORK_THRX_O) $(THR_SUBS).o ${COMPACC_PO} $(SHOWBESTO) re_getlib.o $(SHOWALIGN_P).o htime.o apam.o mpi_doinit.o init_tfy.o drop_tfz.o scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o url_subs.o mrandom.o $(LIB_M) $(THR_LIBS) comp_mpi4.o : comp_lib4.c mw.h structs.h defs.h param.h pcomp_bufs.h thr_buf_structs.h $(CC) $(CFLAGS) -DMPI_SRC -DCOMP_MLIB -c comp_lib4.c -o comp_mpi4.o comp_mpi5.o : comp_lib5.c mw.h structs.h defs.h param.h pcomp_bufs.h thr_buf_structs.h $(CC) $(CFLAGS) -DMPI_SRC -DCOMP_MLIB -c comp_lib5.c -o comp_mpi5.o comp_mpi6.o : comp_lib6.c mw.h structs.h defs.h param.h pcomp_bufs.h thr_buf_structs.h $(CC) $(CFLAGS) -DMPI_SRC -DCOMP_MLIB -c comp_lib6.c -o comp_mpi6.o comp_mpi7.o : comp_lib7.c mw.h structs.h defs.h param.h pcomp_bufs.h thr_buf_structs.h $(CC) $(CFLAGS) -DMPI_SRC -DCOMP_MLIB -c comp_lib7.c -o comp_mpi7.o comp_mpi9.o : comp_lib9.c mw.h structs.h defs.h param.h pcomp_bufs.h thr_buf_structs.h $(CC) $(CFLAGS) -DMPI_SRC -DCOMP_MLIB -c comp_lib9.c -o comp_mpi9.o work_mpi2.o : work_thr2.c mw.h structs.h defs.h param.h pcomp_bufs.h thr_buf_structs.h $(CC) -DMPI_SRC $(CFLAGS) -c work_thr2.c -o work_mpi2.o work_mpi2x.o : work_thr2.c mw.h structs.h defs.h param.h pcomp_bufs.h thr_buf_structs.h $(CC) -DMPI_SRC -DTFAST $(CFLAGS) -c work_thr2.c -o work_mpi2x.o mpi_doinit.o : doinit.c defs.h param.h rstruct.h upam.h structs.h uascii.h aln_structs.h $(CC) -DMPI_SRC $(CFLAGS) -c doinit.c -o mpi_doinit.o fasta36-36.3.8i_14-Nov-2020/make/Makefile.mpi_icc_sse2000066400000000000000000000025621433453312700216050ustar00rootroot00000000000000# $Id: Makefile.mpi_icc_sse2 849 2011-10-21 20:09:55Z wrp $ # # makefile for fasta3, fasta3_t using the Intel icc compiler # # This file is designed for 64-bit Linux systems. # -D_LARGEFILE64_SOURCE and # -DBIG_LIB64 require a 64-bit linux system. # # uses SSE2 extensions for ssearch35(_t) SHELL=/bin/bash CC= mpicc #CC= mpicc-dbg -g -DDEBUG #CC=gcc -Wall -pedantic -ansi -g -O #CC= /usr/local/parasoft/bin/insure -g -DDEBUG # this file works for x86 LINUX # standard options CFLAGS= -DPCOMPLIB=MPI -DSAMP_STATS_MORE -DSHOWSIM -DUNIX -DTIMES -DHZ=100 -DMAX_WORKERS=8 -DTHR_EXIT=pthread_exit -DFASTA_HOST='"your_fasta_host_here"' -DUSE_MMAP -D_REENTRANT -DHAS_INTTYPES -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -DUSE_FSEEKO -DPGM_DOC -DBIG_LIB64 -DSAMP_STATS # -DSAMP_STATS_FAST -DSUPERFAMNUM -DSFCHAR="'|'" # -I/usr/local/include/mysql -DMYSQL_DB # #(for mySQL databases) (also requires change to Makefile35.common) LIB_M = -lm -lz #LIB_M = -L/usr/local/lib/mysql -lmysqlclient -lm # for mySQL databases HFLAGS= # for Linux THR_SUBS = mpi_subs2 THR_LIBS = THR_CC = BIN = ../bin XDIR = /seqprg/bin # set up files for SSE2/Altivec acceleration # include ../make/Makefile.sse_alt # no acceleration # DROPGSW_O = $(DROPGSW_SSE_O) DROPLAL_O = $(DROPLAL_SSE_O) DROPGNW_O = $(DROPGNW_SSE_O) DROPLNW_O = $(DROPLNW_SSE_O) include ../make/Makefile36mpi.common fasta36-36.3.8i_14-Nov-2020/make/Makefile.nm_fcom000077500000000000000000000254341433453312700206720ustar00rootroot00000000000000 #================ common .obj files doinit.obj : doinit.c defs.h param.h upam.h structs.h uascii.h $(CC) $(CFLAGS) -c doinit.c init_sw.obj : initfa.c defs.h param.h upam.h structs.h $(CC) $(CFLAGS) -c -DSSEARCH initfa.c /Foinit_sw.obj init_lal.obj : initfa.c defs.h param.h upam.h structs.h $(CC) $(CFLAGS) -c -DLALIGN initfa.c /Foinit_lal.obj init_gnw.obj : initfa.c defs.h param.h upam.h structs.h $(CC) $(CFLAGS) -c -DGGSEARCH initfa.c /Foinit_gnw.obj init_lnw.obj : initfa.c defs.h param.h upam.h structs.h $(CC) $(CFLAGS) -c -DGLSEARCH initfa.c /Foinit_lnw.obj init_ssw.obj : initfa.c defs.h param.h upam.h structs.h $(CC) $(CFLAGS) -c -DOSEARCH initfa.c /Foinit_ssw.obj init_rss.obj : initfa.c defs.h param.h upam.h structs.h $(CC) $(CFLAGS) -c -DPRSS initfa.c /Foinit_rss.obj init_rfx.obj : initfa.c defs.h param.h upam.h structs.h $(CC) $(CFLAGS) -c -DPRSS -DFASTX initfa.c /Foinit_rfx.obj init_fa.obj : initfa.c defs.h param.h upam.h structs.h $(CC) $(CFLAGS) -c -DFASTA initfa.c /Foinit_fa.obj init_ff.obj : initfa.c defs.h param.h upam.h structs.h $(CC) $(CFLAGS) -c -DFASTF initfa.c /Foinit_ff.obj init_tf.obj : initfa.c defs.h param.h upam.h structs.h $(CC) $(CFLAGS) -c -DFASTF -DTFAST initfa.c /Foinit_tf.obj init_fs.obj : initfa.c defs.h param.h upam.h structs.h $(CC) $(CFLAGS) -c -DFASTS initfa.c /Foinit_fs.obj init_fm.obj : initfa.c defs.h param.h upam.h structs.h $(CC) $(CFLAGS) -c -DFASTM initfa.c /Foinit_fm.obj init_tfs.obj : initfa.c defs.h param.h upam.h structs.h $(CC) $(CFLAGS) -c -DFASTS -DTFAST initfa.c /Foinit_tfs.obj init_tfm.obj : initfa.c defs.h param.h upam.h structs.h $(CC) $(CFLAGS) -c -DFASTM -DTFAST initfa.c /Foinit_tfm.obj init_tfa.obj : initfa.c defs.h param.h upam.h structs.h $(CC) $(CFLAGS) -c -DFASTA -DTFAST initfa.c /Foinit_tfa.obj init_fx.obj : initfa.c defs.h param.h upam.h structs.h $(CC) $(CFLAGS) -c -DFASTX initfa.c /Foinit_fx.obj init_tfx.obj : initfa.c defs.h param.h upam.h structs.h $(CC) $(CFLAGS) -c -DFASTX -DTFAST initfa.c /Foinit_tfx.obj init_fy.obj : initfa.c defs.h param.h upam.h structs.h $(CC) $(CFLAGS) -c -DFASTY initfa.c /Foinit_fy.obj init_tfy.obj : initfa.c defs.h param.h upam.h structs.h $(CC) $(CFLAGS) -c -DFASTY -DTFAST initfa.c /Foinit_tfy.obj #================ miscellaneous htime.obj : htime.c $(CC) $(CFLAGS) -c htime.c compacc.obj : compacc.c upam.h uascii.h param.h structs.h $(MWH) defs.h $(CC) $(CFLAGS) -c compacc.c compacc2_t.obj : compacc2e.c upam.h uascii.h param.h rstruct.h structs.h $(MWH) defs.h aln_structs.h drop_func.h $(CC) $(THR_CC) $(CFLAGS) -DCOMP_THR -DCOMP_MLIB -c compacc2e.c /Focompacc2_t.obj compacc2_s.obj : compacc2e.c upam.h uascii.h param.h rstruct.h structs.h $(MWH) defs.h aln_structs.h drop_func.h $(CC) $(THR_CC) $(CFLAGS) -c compacc2e.c /Focompacc2_s.obj pssm_asn_subs.obj : pssm_asn_subs.c defs.h $(CC) $(CFLAGS) -c pssm_asn_subs.c #================ display list of best hits / alignments showbest.obj : $(SHOWBESTC) $(MWH) defs.h param.h structs.h aln_structs.h drop_func.h $(CC) $(CFLAGS) -c $(SHOWBESTC) /Foshowbest.obj showrss.obj : showrss.c $(MWH) defs.h param.h structs.h aln_structs.h drop_func.h $(CC) $(CFLAGS) -c showrss.c showun.obj : mshowbest.c $(MWH) defs.h aln_structs.h drop_func.h $(CC) $(CFLAGS) -c -DSHOWUN mshowbest.c /Foshowun.obj showrel.obj : $(SHOWBESTC) $(MWH) defs.h aln_structs.h drop_func.h $(CC) $(CFLAGS) -c -DSHOWREL $(SHOWBESTC) /Foshowrel.obj showsum.obj : showsum.c $(MWH) defs.h drop_func.h $(CC) $(CFLAGS) -c showsum.c $(LSHOWALIGN).obj : $(SHOWALIGN).c $(MWHP) defs.h structs.h param.h aln_structs.h drop_func.h $(CC) $(THR_CC) $(CFLAGS) -DLALIGN -c $(SHOWALIGN).c /Fo$(LSHOWALIGN).obj $(SHOWALIGN).obj : $(SHOWALIGN).c $(MWHP) defs.h structs.h param.h aln_structs.h drop_func.h $(CC) $(CFLAGS) -c $(SHOWALIGN).c /Fo$(SHOWALIGN).obj $(SHOWALIGN)_u.obj : $(SHOWALIGN).c $(MWHP) defs.h structs.h param.h aln_structs.h drop_func.h $(CC) $(CFLAGS) -DSHOWUN -c /Fo$(SHOWALIGN)_u.obj $(SHOWALIGN).c re_getlib.obj : re_getlib.c mw.h mm_file.h $(CC) $(CFLAGS) -c re_getlib.c lib_sel.obj : lib_sel.c defs.h structs.h $(CC) $(CFLAGS) -c lib_sel.c c_dispn.obj : c_dispn.c defs.h structs.h param.h $(CC) $(CFLAGS) -c c_dispn.c build_ares.obj : build_ares.c $(MWH) defs.h param.h rstruct.h structs.h aln_structs.h drop_func.h $(CC) $(THR_CC) $(CFLAGS) -c build_ares.c /Fobuild_ares.obj #================ statistical functions karlin.obj : karlin.c param.h $(CC) $(CFLAGS) -c karlin.c scale_se.obj : scaleswn.c defs.h param.h structs.h $(MWH) alt_parms.h $(CC) $(CFLAGS) -DLOCAL_SCORE -c scaleswn.c /Foscale_se.obj scale_sn.obj : scaleswn.c defs.h param.h structs.h $(MWH) alt_parms.h $(CC) -DNORMAL_DIST $(CFLAGS) -c scaleswn.c /Foscale_sn.obj scaleswtf.obj : scaleswt.c defs.h param.h structs.h $(MWH) alt_parms.h $(CC) $(CFLAGS) -DFASTF -c scaleswt.c /Foscaleswtf.obj scaleswts.obj : scaleswt.c defs.h param.h structs.h $(MWH) alt_parms.h $(CC) $(CFLAGS) -c scaleswt.c /Foscaleswts.obj tatstats_fs.obj : tatstats.c tatstats.h $(CC) $(CFLAGS) -c -DFASTS tatstats.c /Fotatstats_fs.obj tatstats_ff.obj : tatstats.c tatstats.h $(CC) $(CFLAGS) -c -DFASTF tatstats.c /Fotatstats_ff.obj tatstats_fm.obj : tatstats.c tatstats.h $(CC) $(CFLAGS) -c -DFASTM tatstats.c /Fotatstats_fm.obj last_tat.obj : last_tat.c defs.h mm_file.h structs.h param.h $(CC) $(CFLAGS) -c last_tat.c last_thresh.obj : last_thresh.c defs.h mm_file.h structs.h param.h $(CC) $(CFLAGS) -c last_thresh.c #================ drop functions - actual scores/alignments drop_nfa.obj : dropnfa.c dropnfa.h param.h defs.h drop_func.h $(CC) $(CFLAGS) -c dropnfa.c /Fodrop_nfa.obj # drop_ff, _fs, _fm must define FASTF, FASTS, and FASTM to ensure # that tatstats.h is built appropriately drop_ff.obj : dropff2.c param.h defs.h tatstats.h drop_func.h $(CC) $(CFLAGS) -DFASTF -c dropff2.c /Fodrop_ff.obj drop_tff.obj : dropff2.c param.h defs.h tatstats.h drop_func.h $(CC) $(CFLAGS) -DFASTF -DTFAST -c dropff2.c /Fodrop_tff.obj drop_ff2.obj : dropff2.c param.h defs.h tatstats.h drop_func.h $(CC) $(CFLAGS) -c -DFASTF dropff2.c /Fodrop_ff2.obj drop_tff2.obj : dropff2.c param.h defs.h tatstats.h drop_func.h $(CC) $(CFLAGS) -c -DFASTF -DTFAST dropff2.c /Fodrop_tff.obj drop_fs2.obj : dropfs2.c param.h defs.h tatstats.h drop_func.h $(CC) $(CFLAGS) -DFASTS -c dropfs2.c /Fodrop_fs2.obj drop_tfs.obj : dropfs2.c param.h defs.h drop_func.h $(CC) $(CFLAGS) -c -DTFAST -DFASTS dropfs2.c /Fodrop_tfs.obj drop_fm.obj : dropfs2.c param.h defs.h drop_func.h $(CC) $(CFLAGS) -c -DFASTM dropfs2.c /Fodrop_fm.obj drop_tfm.obj : dropfs2.c param.h defs.h drop_func.h $(CC) $(CFLAGS) -c -DTFAST -DFASTM dropfs2.c /Fodrop_tfm.obj drop_tfa.obj : dropnfa.c dropnfa.h upam.h param.h defs.h $(CC) $(CFLAGS) -c -DTFASTA dropnfa.c /Fodrop_tfa.obj drop_fx.obj : dropfx2.c upam.h param.h defs.h drop_func.h $(CC) $(CFLAGS) -c dropfx2.c /Fodrop_fx.obj drop_tfx.obj : dropfx2.c upam.h param.h defs.h drop_func.h $(CC) $(CFLAGS) -c -DTFAST dropfx2.c /Fodrop_tfx.obj drop_fz.obj : dropfz3.c upam.h param.h defs.h aamap.h drop_func.h $(CC) $(CFLAGS) -c dropfz3.c /Fodrop_fz.obj drop_tfz.obj : dropfz3.c upam.h param.h defs.h aamap.h drop_func.h $(CC) $(CFLAGS) -c -DTFAST dropfz3.c /Fodrop_tfz.obj dropnsw.obj : dropnsw.c upam.h param.h structs.h drop_func.h $(CC) $(CFLAGS) -c dropnsw.c dropgsw2.obj : dropgsw2.c dropgsw2.h upam.h param.h structs.h drop_func.h $(CC) $(CFLAGS) -c dropgsw2.c dropgnw2.obj : dropnnw2.c upam.h param.h structs.h drop_func.h $(CC) $(CFLAGS) -c dropnnw2.c /Fodropgnw2.obj droplnw2.obj : dropnnw2.c upam.h param.h structs.h drop_func.h $(CC) $(CFLAGS) -c dropnnw2.c /Fodroplnw2.obj droplal.obj : dropgsw2.c dropgsw2.h upam.h param.h drop_func.h a_mark.h $(CC) $(CFLAGS) -DLALIGN -c dropgsw2.c /Fodroplal.obj droplal_sse2.obj : dropgsw2.c dropgsw2.h upam.h param.h drop_func.h a_mark.h $(CC) $(CFLAGS) -DLALIGN -DSW_SSE2 -c dropgsw2.c /Fodroplal.obj dropgsw2_sse2.obj : dropgsw2.c dropgsw2.h upam.h param.h structs.h drop_func.h $(CC) $(CFLAGS) -DSW_SSE2 -c dropgsw2.c /Fodropgsw2_sse2.obj smith_waterman_altivec.obj : smith_waterman_altivec.c smith_waterman_altivec.h dropgsw2.h defs.h param.h $(CC) $(CFLAGS) -c smith_waterman_altivec.c smith_waterman_sse2.obj : smith_waterman_sse2.c smith_waterman_sse2.h dropgsw2.h defs.h param.h $(CC) $(CFLAGS) -DSW_SSE2 -c smith_waterman_sse2.c dropnw.obj : dropnw.c upam.h param.h structs.h drop_func.h $(CC) $(CFLAGS) -c dropnw.c wm_align.obj : wm_align.c defs.h param.h a_mark.h $(CC) $(THR_CC) $(CFLAGS) -c wm_align.c calcons_fa.obj : cal_cons2.c defs.h param.h a_mark.h $(CC) $(THR_CC) $(CFLAGS) -DFASTA -c cal_cons2.c /Focalcons_fa.obj calcons_sw.obj : cal_cons2.c defs.h param.h a_mark.h $(CC) $(THR_CC) $(CFLAGS) -DSSEARCH -c cal_cons2.c /Focalcons_sw.obj calcons_la.obj : cal_cons2.c defs.h param.h a_mark.h $(CC) $(THR_CC) -DLALIGN -DLCAL_CONS $(CFLAGS) -c cal_cons2.c /Focalcons_la.obj calcons_ff.obj : cal_consf.c defs.h param.h a_mark.h $(CC) $(THR_CC) $(CFLAGS) -DFASTF -c cal_consf.c /Focalcons_ff.obj calcons_fs.obj : cal_consf.c defs.h param.h a_mark.h $(CC) $(THR_CC) $(CFLAGS) -DFASTS -c cal_consf.c /Focalcons_fs.obj calcons_fm.obj : cal_consf.c defs.h param.h a_mark.h $(CC) $(THR_CC) $(CFLAGS) -DFASTM -c cal_consf.c /Focalcons_fm.obj calcons_tff.obj : cal_consf.c defs.h param.h a_mark.h $(CC) $(THR_CC) $(CFLAGS) -DTFAST -DFASTF -c cal_consf.c /Focalcons_tff.obj calcons_tfs.obj : cal_consf.c defs.h param.h a_mark.h $(CC) $(THR_CC) $(CFLAGS) -DTFAST -DFASTS -c cal_consf.c /Focalcons_tfs.obj calcons_tfm.obj : cal_consf.c defs.h param.h a_mark.h $(CC) $(THR_CC) $(CFLAGS) -DTFAST -DFASTM -c cal_consf.c /Focalcons_tfm.obj #================ reading query, libraries getseq.obj : getseq.c defs.h uascii.h structs.h upam.h $(CC) $(CFLAGS) -c getseq.c llgetaa.obj : llgetaa.c upam.h uascii.h $(CC) $(CFLAGS) -c -DNOLIB llgetaa.c lgetlib.obj : $(NGETLIB).c altlib.h upam.h uascii.h mm_file.h $(CC) $(CFLAGS) -c $(NGETLIB).c /Folgetlib.obj lgetaa_m.obj : mmgetaa.c altlib.h ncbl2_head.h upam.h uascii.h mm_file.h $(CC) $(CFLAGS) -c mmgetaa.c /Folgetaa_m.obj ncbl_lib.obj : ncbl_lib.c ncbl_head.h $(CC) $(CFLAGS) -c ncbl_lib.c ncbl2_mlib.obj : ncbl2_mlib.c ncbl2_head.h mm_file.h $(CC) $(CFLAGS) -c ncbl2_mlib.c mysql_lib.obj : mysql_lib.c mm_file.h $(CC) $(CFLAGS) -c mysql_lib.c pgsql_lib.obj : pgsql_lib.c mm_file.h $(CC) $(CFLAGS) -c pgsql_lib.c #================ threading functions pthr_subs2.obj : pthr_subs2.c thr_bufs2.h pthr_subs.h $(CC) $(CFLAGS) -c pthr_subs2.c uthr_subs.obj : uthr_subs.c thr_bufs2.h uthr_subs.h $(CC) $(CFLAGS) -c uthr_subs.c #================ translation faatran.obj : faatran.c upam.h uascii.h $(CC) $(CFLAGS) -c faatran.c url_subs.obj : url_subs.c structs.h param.h $(CC) $(CFLAGS) -c url_subs.c $(NRAND).obj : $(NRAND).c $(CC) $(CFLAGS) -c $(NRAND).c #================ windows getopt() getopt.obj : getopt.c $(CC) $(CFLAGS) -c getopt.c fasta36-36.3.8i_14-Nov-2020/make/Makefile.nm_pcom000077500000000000000000000662501433453312700207050ustar00rootroot00000000000000 # combinations of files for "composite" drop* functions # DROPLNW_O = droplnw2.obj wm_align.obj calcons_sw.obj DROPGNW_O = dropgnw2.obj wm_align.obj calcons_sw.obj DROPNFA_O = drop_nfa.obj wm_align.obj calcons_fa.obj DROPTFA_O = drop_tfa.obj DROPFF_O = drop_ff2.obj calcons_ff.obj DROPFS_O = drop_fs2.obj calcons_fs.obj DROPFM_O = drop_fm.obj calcons_fm.obj DROPTFF_O = drop_tff.obj calcons_tff.obj DROPTFS_O = drop_tfs.obj calcons_tfs.obj DROPTFM_O = drop_tfm.obj calcons_tfm.obj COMPACC_TO = compacc2_t.obj # used with comp_lib9.c COMPACC_SO = compacc2_s.obj SHOWBESTC = mshowbest.c SHOWBESTO = showbest.obj build_ares.obj SHOWALIGN = mshowalign2 LSHOWALIGN = lshowalign2 MWH = mw.h MWHP = mw.h TPROGS = ssearch36_t.exe fasta36_t.exe fasts36_t.exe fastx36_t.exe tfastx36_t.exe fasty36_t.exe tfasty36_t.exe tfasts36_t.exe fastm36_t.exe fastf36_t.exe tfastf36_t.exe ggsearch36_t.exe glsearch36_t.exe SPROGS = fasta36.exe ssearch36.exe fasts36.exe fastx36.exe tfastx36.exe fasty36.exe tfasty36.exe tfasts36.exe fastm36.exe tfastm36.exe fastf36.exe tfastf36.exe lalign36.exe ggsearch36.exe glsearch36.exe MAPROGS = map_db.exe XTPROGS = fastx36_t.exe tfastx36_t.exe fasty36_t.exe tfasty36_t.exe XPROGS = fastx36.exe tfastx36.exe .exe fasty36 tfasty36.exe PROGS = $(SPROGS) $(TPROGS) all : $(PROGS) tall: $(TPROGS) sall: $(SPROGS) xall: $(XTPROGS) $(XPROGS) $(ZTPROGS) $(ZPROGS) clean-up: del *.obj $(PROGS) install: $(PROGS) copy $(PROGS) $(XDIR) sinstall: $(SPROGS) copy $(SPROGS) $(XDIR) tinstall: $(TPROGS) cp $(TPROGS) $(XDIR) fasta36.exe : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_fa.obj scale_se.obj karlin.obj $(DROPNFA_O) $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj $(NRAND).obj url_subs.obj getopt.obj $(CL) /Fe..\bin\fasta36.exe $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_fa.obj $(DROPNFA_O) scale_se.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj url_subs.obj $(NRAND).obj getopt.obj fastx36.exe : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_fx.obj scale_se.obj karlin.obj drop_fx.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj faatran.obj url_subs.obj $(NRAND).obj getopt.obj $(CL) /Fe..\bin\fastx36.exe $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_fx.obj drop_fx.obj scale_se.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj faatran.obj url_subs.obj $(NRAND).obj getopt.obj fasty36.exe : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_fy.obj scale_se.obj karlin.obj drop_fz.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj faatran.obj url_subs.obj $(NRAND).obj getopt.obj $(CL) /Fe..\bin\fasty36.exe $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_fy.obj drop_fz.obj scale_se.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj faatran.obj url_subs.obj $(NRAND).obj getopt.obj fastf36.exe : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_ff.obj scaleswts.obj last_tat.obj tatstats_ff.obj karlin.obj $(DROPFF_O) $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj $(NRAND).obj url_subs.obj getopt.obj $(CL) /Fe..\bin\fastf36.exe $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_ff.obj $(DROPFF_O) scaleswts.obj last_tat.obj tatstats_ff.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj $(NRAND).obj url_subs.obj getopt.obj fastf36u : $(COMP_LIBO) $(COMPACC_SO) showun.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_ff.obj scaleswtf.obj karlin.obj $(DROPFF_O) $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj $(NRAND).obj url_subs.obj getopt.obj $(CL) /Fe..\bin\fastf36u.exe $(COMP_LIBO) $(COMPACC_SO) showun.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_ff.obj $(DROPFF_O) scaleswtf.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj $(NRAND).obj url_subs.obj getopt.obj fastf36s : $(COMP_LIBO) $(COMPACC_SO) showsum.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_ff.obj scaleswtf.obj karlin.obj $(DROPFF_O) $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj $(NRAND).obj url_subs.obj getopt.obj $(CL) /Fe..\bin\fastf36s.exe $(COMP_LIBO) $(COMPACC_SO) showsum.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_ff.obj $(DROPFF_O) scaleswtf.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj $(NRAND).obj url_subs.obj getopt.obj fasts36.exe : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_fs.obj scaleswts.obj last_tat.obj tatstats_fs.obj karlin.obj $(DROPFS_O) $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj $(NRAND).obj url_subs.obj getopt.obj $(CL) /Fe..\bin\fasts36.exe $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_fs.obj $(DROPFS_O) scaleswts.obj last_tat.obj tatstats_fs.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj $(NRAND).obj url_subs.obj getopt.obj fastm36.exe : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_fm.obj scaleswts.obj last_tat.obj tatstats_fm.obj karlin.obj $(DROPFM_O) $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj $(NRAND).obj url_subs.obj getopt.obj $(CL) /Fe..\bin\fastm36.exe $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_fm.obj $(DROPFM_O) scaleswts.obj last_tat.obj tatstats_fm.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj $(NRAND).obj url_subs.obj getopt.obj tfastx36.exe : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_tfx.obj scale_se.obj karlin.obj drop_tfx.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj faatran.obj url_subs.obj $(NRAND).obj getopt.obj $(CL) /Fe..\bin\tfastx36.exe $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_tfx.obj drop_tfx.obj scale_se.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj faatran.obj url_subs.obj $(NRAND).obj getopt.obj tfasty36.exe : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_tfy.obj scale_se.obj karlin.obj drop_tfz.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj faatran.obj url_subs.obj $(NRAND).obj getopt.obj $(CL) /Fe..\bin\tfasty36.exe $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_tfy.obj drop_tfz.obj scale_se.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj faatran.obj url_subs.obj $(NRAND).obj getopt.obj tfastf36.exe : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_tf.obj scaleswtf.obj last_tat.obj tatstats_ff.obj karlin.obj $(DROPTFF_O) $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj faatran.obj $(NRAND).obj url_subs.obj getopt.obj $(CL) /Fe..\bin\tfastf36.exe $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_tf.obj $(DROPTFF_O) scaleswtf.obj last_tat.obj tatstats_ff.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj faatran.obj $(NRAND).obj url_subs.obj getopt.obj tfastf36s : $(COMP_LIBO) $(COMPACC_SO) showsum.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_tf.obj scaleswtf.obj karlin.obj $(DROPTFF_O) $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj faatran.obj $(NRAND).obj url_subs.obj getopt.obj $(CL) /Fe..\bin\tfastf36s.exe $(COMP_LIBO) $(COMPACC_SO) showsum.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_tf.obj $(DROPTFF_O) scaleswtf.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj faatran.obj $(NRAND).obj url_subs.obj getopt.obj tfasts36.exe : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_tfs.obj scaleswts.obj tatstats_fs.obj last_tat.obj karlin.obj $(DROPTFS_O) $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj faatran.obj $(NRAND).obj url_subs.obj getopt.obj $(CL) /Fe..\bin\tfasts36.exe $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_tfs.obj $(DROPTFS_O) scaleswts.obj tatstats_fs.obj last_tat.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj faatran.obj $(NRAND).obj url_subs.obj getopt.obj tfastm36.exe : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_tfm.obj scaleswts.obj tatstats_fm.obj last_tat.obj karlin.obj $(DROPTFM_O) $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj faatran.obj $(NRAND).obj url_subs.obj getopt.obj $(CL) /Fe..\bin\tfastm36.exe $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_tfm.obj $(DROPTFM_O) scaleswts.obj tatstats_fm.obj last_tat.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj faatran.obj $(NRAND).obj url_subs.obj getopt.obj ssearch36nosse2.exe : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_sw.obj scale_se.obj karlin.obj $(DROPGSW_O) $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj url_subs.obj $(NRAND).obj pssm_asn_subs.obj getopt.obj $(CL) /Fe..\bin\ssearch36nosse2.exe $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_sw.obj $(DROPGSW_O) scale_se.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj url_subs.obj $(NRAND).obj pssm_asn_subs.obj getopt.obj ggsearch36.exe : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_gnw.obj scale_sn.obj karlin.obj $(DROPGNW_O) $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj url_subs.obj $(NRAND).obj pssm_asn_subs.obj getopt.obj $(CL) /Fe..\bin\ggsearch36.exe $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_gnw.obj $(DROPGNW_O) scale_sn.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj url_subs.obj $(NRAND).obj pssm_asn_subs.obj getopt.obj glsearch36.exe : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_lnw.obj scale_sn.obj karlin.obj $(DROPLNW_O) $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj url_subs.obj $(NRAND).obj pssm_asn_subs.obj getopt.obj $(CL) /Fe..\bin\glsearch36.exe $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_lnw.obj $(DROPLNW_O) scale_sn.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj url_subs.obj $(NRAND).obj pssm_asn_subs.obj getopt.obj lalign36.exe : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.obj $(LSHOWALIGN).obj htime.obj apam.obj doinit.obj init_lal.obj scale_se.obj karlin.obj last_thresh.obj $(DROPLAL_O) $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj url_subs.obj $(NRAND).obj pssm_asn_subs.obj getopt.obj $(CL) /Fe..\bin\lalign36.exe $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.obj $(LSHOWALIGN).obj htime.obj apam.obj doinit.obj init_lal.obj last_thresh.obj $(DROPLAL_O) scale_se.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj url_subs.obj $(NRAND).obj pssm_asn_subs.obj getopt.obj ssearch36.exe : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_sw.obj scale_se.obj karlin.obj $(DROPGSW_SSE2_O) $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj url_subs.obj $(NRAND).obj pssm_asn_subs.obj getopt.obj $(CL) /Fe..\bin\ssearch36.exe $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_sw.obj $(DROPGSW_SSE2_O) scale_se.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj url_subs.obj $(NRAND).obj pssm_asn_subs.obj getopt.obj osearch36.exe : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_ssw.obj scale_se.obj karlin.obj dropnsw.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj url_subs.obj $(NRAND).obj getopt.obj $(CL) /Fe..\bin\osearch36.exe $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_ssw.obj dropnsw.obj scale_se.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj url_subs.obj $(NRAND).obj getopt.obj usearch36.exe : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_sw.obj scale_se.obj karlin.obj dropnsw.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj url_subs.obj $(NRAND).obj getopt.obj $(CL) /Fe..\bin\usearch36.exe $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_sw.obj dropnsw.obj scale_se.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj url_subs.obj $(NRAND).obj getopt.obj ssearch36nosse2_t.exe : $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_sw.obj scale_se.obj karlin.obj $(DROPGSW_O) $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj url_subs.obj $(NRAND).obj pssm_asn_subs.obj getopt.obj $(CL) /Fe..\bin\ssearch36nosse2_t.exe $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_sw.obj $(DROPGSW_O) scale_se.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj url_subs.obj $(NRAND).obj pssm_asn_subs.obj getopt.obj $(THR_LIBS) ssearch36_t.exe : $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_sw.obj scale_se.obj karlin.obj $(DROPGSW_SSE2_O) $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj url_subs.obj $(NRAND).obj pssm_asn_subs.obj getopt.obj $(CL) /Fe..\bin\ssearch36_t.exe $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_sw.obj $(DROPGSW_SSE2_O) scale_se.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj url_subs.obj $(NRAND).obj pssm_asn_subs.obj getopt.obj $(THR_LIBS) osearch36_t.exe : $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_sw.obj scale_se.obj karlin.obj dropnsw.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj url_subs.obj $(NRAND).obj getopt.obj $(CL) /Fe..\bin\osearch36_t.exe $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_sw.obj dropnsw.obj scale_se.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj url_subs.obj $(NRAND).obj getopt.obj $(THR_LIBS) usearch36_t.exe : $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_sw.obj scale_se.obj karlin.obj dropnsw.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj url_subs.obj $(NRAND).obj getopt.obj $(CL) /Fe..\bin\usearch36_t.exe $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_sw.obj dropnsw.obj scale_se.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj url_subs.obj $(NRAND).obj getopt.obj $(THR_LIBS) ggsearch36_t.exe : $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_gnw.obj scale_sn.obj karlin.obj $(DROPGNW_O) $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj url_subs.obj $(NRAND).obj pssm_asn_subs.obj getopt.obj $(CL) /Fe..\bin\ggsearch36_t.exe $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_gnw.obj $(DROPGNW_O) scale_sn.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj url_subs.obj $(NRAND).obj pssm_asn_subs.obj getopt.obj $(THR_LIBS) glsearch36_t.exe : $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_lnw.obj scale_sn.obj karlin.obj $(DROPLNW_O) $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj url_subs.obj $(NRAND).obj pssm_asn_subs.obj getopt.obj $(CL) /Fe..\bin\glearch36_t.exe $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_lnw.obj $(DROPLNW_O) scale_sn.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj url_subs.obj $(NRAND).obj pssm_asn_subs.obj getopt.obj $(THR_LIBS) fasta36_t.exe : $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_fa.obj scale_se.obj karlin.obj $(DROPNFA_O) $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj url_subs.obj $(NRAND).obj getopt.obj $(CL) /Fe..\bin\fasta36_t.exe $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_fa.obj $(DROPNFA_O) scale_se.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj url_subs.obj $(NRAND).obj getopt.obj $(THR_LIBS) fasta36s_t.exe : $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) showsum.obj re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_fa.obj scale_se.obj karlin.obj $(DROPNFA_O) $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj url_subs.obj $(NRAND).obj getopt.obj $(CL) /Fe..\bin\fasta36s_t.exe $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) showsum.obj re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_fa.obj $(DROPNFA_O) scale_se.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj url_subs.obj $(NRAND).obj getopt.obj $(THR_LIBS) fasta36u_t.exe : $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) showun.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_fa.obj scale_se.obj karlin.obj $(DROPNFA_O) $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj $(NRAND).obj url_subs.obj getopt.obj $(CL) /Fe..\bin\fasta36u_t.exe $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) showun.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_fa.obj $(DROPNFA_O) scale_se.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj $(NRAND).obj url_subs.obj getopt.obj $(THR_LIBS) fasta36r_t.exe : $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) showrel.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_fa.obj scale_se.obj karlin.obj $(DROPNFA_O) $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj $(NRAND).obj url_subs.obj getopt.obj $(CL) /Fe..\bin\fasta36r_t.exe $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) showrel.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_fa.obj $(DROPNFA_O) scale_se.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj $(NRAND).obj url_subs.obj getopt.obj $(THR_LIBS) fastf36_t.exe : $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_ff.obj scaleswtf.obj last_tat.obj tatstats_ff.obj karlin.obj $(DROPFF_O) $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj $(NRAND).obj url_subs.obj getopt.obj $(CL) /Fe..\bin\fastf36_t.exe $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_ff.obj $(DROPFF_O) scaleswtf.obj last_tat.obj tatstats_ff.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj $(NRAND).obj url_subs.obj getopt.obj $(THR_LIBS) fastf36s_t.exe : $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) showsum.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_ff.obj scaleswtf.obj karlin.obj $(DROPFF_O) $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj $(NRAND).obj url_subs.obj getopt.obj $(CL) /Fe..\bin\fastf36s_t.exe $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) showsum.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_ff.obj $(DROPFF_O) scaleswtf.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj $(NRAND).obj url_subs.obj getopt.obj $(THR_LIBS) fasts36_t.exe : $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_fs.obj scaleswts.obj last_tat.obj tatstats_fs.obj karlin.obj $(DROPFS_O) $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj $(NRAND).obj url_subs.obj getopt.obj $(CL) /Fe..\bin\fasts36_t.exe $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_fs.obj $(DROPFS_O) scaleswts.obj last_tat.obj tatstats_fs.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj $(NRAND).obj url_subs.obj getopt.obj $(THR_LIBS) fastm36_t.exe : $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_fs.obj scaleswts.obj last_tat.obj tatstats_fm.obj karlin.obj $(DROPFM_O) $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj $(NRAND).obj url_subs.obj getopt.obj $(CL) /Fe..\bin\fastm36_t.exe $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_fs.obj $(DROPFM_O) scaleswts.obj last_tat.obj tatstats_fm.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj $(NRAND).obj url_subs.obj getopt.obj $(THR_LIBS) fastx36_t.exe : $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj c_dispn.obj htime.obj apam.obj doinit.obj init_fx.obj faatran.obj scale_se.obj karlin.obj drop_fx.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj url_subs.obj $(NRAND).obj getopt.obj $(CL) /Fe..\bin\fastx36_t.exe $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_fx.obj drop_fx.obj faatran.obj scale_se.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj url_subs.obj $(NRAND).obj getopt.obj $(THR_LIBS) fasty36_t.exe : $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj c_dispn.obj htime.obj apam.obj doinit.obj init_fy.obj faatran.obj scale_se.obj karlin.obj drop_fz.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj url_subs.obj $(NRAND).obj getopt.obj $(CL) /Fe..\bin\fasty36_t.exe $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_fy.obj drop_fz.obj faatran.obj scale_se.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj url_subs.obj $(NRAND).obj getopt.obj $(THR_LIBS) tfasta36.exe : $(COMP_LIBO) $(COMPACC_TO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_tfa.obj scale_se.obj karlin.obj $(DROPTFA_O) $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj faatran.obj url_subs.obj $(NRAND).obj getopt.obj $(CL) /Fe..\bin\tfasta36.exe $(COMP_LIBO) $(COMPACC_TO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_tfa.obj $(DROPTFA_O) scale_se.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj faatran.obj url_subs.obj $(NRAND).obj getopt.obj tfasta36_t.exe : $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj c_dispn.obj htime.obj apam.obj doinit.obj init_tfa.obj scale_se.obj karlin.obj $(DROPTFA_O) $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj faatran.obj url_subs.obj $(NRAND).obj getopt.obj $(CL) /Fe..\bin\tfasta36_t.exe $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_tfa.obj $(DROPTFA_O) scale_se.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj faatran.obj url_subs.obj $(NRAND).obj getopt.obj $(THR_LIBS) tfastf36_t.exe : $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj c_dispn.obj htime.obj apam.obj doinit.obj init_tf.obj scaleswtf.obj last_tat.obj tatstats_ff.obj karlin.obj $(DROPTFF_O) $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj faatran.obj $(NRAND).obj url_subs.obj getopt.obj $(CL) /Fe..\bin\tfastf36_t.exe $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_tf.obj $(DROPTFF_O) scaleswtf.obj last_tat.obj tatstats_ff.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj faatran.obj $(NRAND).obj url_subs.obj getopt.obj $(THR_LIBS) tfasts36_t.exe : $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj c_dispn.obj htime.obj apam.obj doinit.obj init_tfs.obj scaleswts.obj last_tat.obj tatstats_fs.obj karlin.obj $(DROPTFS_O) $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj faatran.obj $(NRAND).obj url_subs.obj getopt.obj $(CL) /Fe..\bin\tfasts36_t.exe $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_tfs.obj $(DROPTFS_O) scaleswts.obj last_tat.obj tatstats_fs.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj faatran.obj $(NRAND).obj url_subs.obj getopt.obj $(THR_LIBS) tfastx36_t.exe : $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_tfx.obj scale_se.obj karlin.obj drop_tfx.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj faatran.obj url_subs.obj $(NRAND).obj getopt.obj $(CL) /Fe..\bin\tfastx36_t.exe $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_tfx.obj drop_tfx.obj scale_se.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj faatran.obj url_subs.obj $(NRAND).obj getopt.obj $(THR_LIBS) tfasty36_t.exe : $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_tfy.obj scale_se.obj karlin.obj drop_tfz.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj faatran.obj url_subs.obj $(NRAND).obj getopt.obj $(CL) /Fe..\bin\tfasty36_t.exe $(COMP_THRO) work_thr2.obj $(THR_SUBS).obj $(COMPACC_TO) $(SHOWBESTO) re_getlib.obj $(SHOWALIGN).obj htime.obj apam.obj doinit.obj init_tfy.obj drop_tfz.obj scale_se.obj karlin.obj $(LGETLIB) c_dispn.obj $(NCBL_LIB) lib_sel.obj faatran.obj url_subs.obj $(NRAND).obj getopt.obj $(THR_LIBS) comp_lib9.obj : comp_lib9.c mw.h structs.h defs.h param.h $(CC) $(CFLAGS) -c comp_lib9.c comp_mlib9.obj : comp_lib9.c mw.h structs.h defs.h param.h $(CC) $(CFLAGS) -DCOMP_MLIB -c comp_lib9.c /Focomp_mlib9.obj comp_mthr9.obj : comp_lib9.c mw.h structs.h defs.h param.h thr_bufs2.h $(CC) $(CFLAGS) -DCOMP_THR -DCOMP_MLIB -c comp_lib9.c /Focomp_mthr9.obj comp_lib4.obj : comp_lib4.c mw.h structs.h defs.h param.h $(CC) $(CFLAGS) -c comp_lib4.c comp_mlib4.obj : comp_lib4.c mw.h structs.h defs.h param.h $(CC) $(CFLAGS) -DCOMP_MLIB -c comp_lib4.c /Focomp_mlib4.obj comp_thr2.obj : comp_lib4.c mw.h structs.h defs.h param.h thr_bufs2.h $(CC) $(CFLAGS) -DCOMP_THR -c comp_lib4.c /Focomp_thr2.obj comp_mthr4.obj : comp_lib4.c mw.h structs.h defs.h param.h thr_bufs2.h $(CC) $(CFLAGS) -DCOMP_THR -DCOMP_MLIB -c comp_lib4.c /Focomp_mthr4.obj work_thr2.obj : work_thr2.c mw.h structs.h defs.h param.h thr_bufs2.h $(CC) $(CFLAGS) -c work_thr2.c print_pssm.exe : print_pssm.c getseq.c karlin.c apam.c $(CC) /Fe..\bin\print_pssm.exe $(CFLAGS) print_pssm.c getseq.c karlin.c apam.c getopt.obj map_db.exe : map_db.c uascii.h ncbl2_head.h $(CC) /Fe..\bin\map_db.exe map_db.c list_db.exe : list_db.c $(CC) /Fe..\bin\list_db.exe list_db.c fasta36-36.3.8i_14-Nov-2020/make/Makefile.nmk_icl000077500000000000000000000020141433453312700206550ustar00rootroot00000000000000# # makefile for fasta3, fasta3_t. Use makefile.pvm for pvcompxx. # # options for Intel C compiler (v9.1) # # must be compiled/linked with /MT (or /MTd for debugging) to ensure # multi-threaded staticly linked executables. /MD uses dynamic # linking to DLL's, which may not be available on the users machine CC= icl /O2 /MT /W1 #CC= icl /Zi /MTd /W1 CL= icl /O2 /MT #CL= icl /Zi /MTd # standard options CFLAGS= -DSHOW_HELP -DSHOWSIM -DWIN32 -DHZ=100 -DSAMP_STATS -DPGM_DOC -DTHR_EXIT=pthread_exit -D_CRT_SECURE_NO_WARNINGS=1 -DMAX_WORKERS=2 BIN = ../bin XDIR = /seqprg/bin THR_SUBS = pthr_subs2 THR_LIBS= pthreadVC2.lib DROPGSW_SSE2_O = dropgsw2_sse2.obj smith_waterman_sse2.obj wm_align.obj calcons_sw.obj DROPGSW_O = dropgsw2.obj wm_align.obj calcons_sw.obj DROPLAL_SSE2_O = droplal_sse2.obj smith_waterman_sse2.obj lsim4.obj calcons_la.obj DROPLAL_O = droplal.obj lsim4.obj calcons_la.obj # # renamed (fasta36) programs include ../make/Makefile36.nmk_com # conventional (fasta3) names # include ../make/Makefile.common fasta36-36.3.8i_14-Nov-2020/make/Makefile.os_x000066400000000000000000000034631433453312700202170ustar00rootroot00000000000000# makefile for fasta3, fasta3_t. Use makefile.pvm for pvcompxx. # this file works for Mac OS X (PPC) # # this file supports mmap()'ed databases in BLAST2 format use -DUSE_MMAP # for mmap()ed BLAST2 format. # the -DDEBUG option provides additional debugging information, particularly # with -D on the command line. # use -DBIG_LIB64 to generate 64-bit offsets in map_db .xin files SHELL=/bin/bash # in my hands, gcc-4.0 is about 40% slower than gcc-3.3 on the Altivec code CC= gcc -g -O3 -arch ppc -falign-loops=32 -O3 -maltivec -mpim-altivec -force_cpusubtype_ALL LIB_DB= # -pg -finstrument-functions -lSaturn #CC= gcc-3.3 -g -falign-loops=32 -O3 -mcpu=7450 -faltivec #CC= gcc-3.3 -g -DDEBUG -mcpu=7450 -faltivec #LIB_DB=-lz #CC= cc -g -Wall -pedantic -faltivec # # standard line for normal searching CFLAGS= -DSHOW_HELP -DSHOWSIM -DM10_CONS -DUNIX -DTIMES -DHZ=100 -DMAX_WORKERS=2 -DTHR_EXIT=pthread_exit -DFASTA_HOST='"fasta.bioch.virginia.edu/fasta_www2"' -DUSE_MMAP -DUSE_FSEEKO -DHAS_INTTYPES -DSAMP_STATS -DPGM_DOC -DBIG_LIB64 -DMAX_MEMK=2*1024*1024 # -DSUPERFAMNUM -DSFCHAR="'|'" # add for MySQL support # -I/usr/local/mysql/include -DMYSQL_DB HFLAGS= THR_SUBS = pthr_subs2 THR_LIBS = THR_CC = # for IBM with current pthreads #CC= xlc_r -v -g #THR_SUBS = ibm_pthr_subs2 #THR_LIBS = -lpthreads #THR_CC = BIN = ../bin # diectory for universal binary process UDIR = $(BIN)/ppc #XDIR = ${HOME}/bin #XDIR = /home/slib/bin/MACOSX/ #XDIR = /Users/seqprg/bin XDIR = /seqprg/bin #XDIR = ./ppc # set up files for SSE2/Altivec acceleration # include ../make/Makefile.sse_alt # Altivec acceleration # DROPGSW_O = $(DROPGSW_ALT_O) DROPLAL_O = $(DROPLAL_ALT_O) DROPGNW_O = $(DROPGNW_NA_O) DROPLNW_O = $(DROPLNW_NA_O) # provide mysql function #include ../make/Makefile36m.common_sql # no mysql include ../make/Makefile36m.common fasta36-36.3.8i_14-Nov-2020/make/Makefile.os_x86000066400000000000000000000033721433453312700203740ustar00rootroot00000000000000# makefile for fasta3, fasta3_t. Use makefile.pvm for pvcompxx. # # $Name: $ - $Id: Makefile.os_x86 750 2011-05-19 17:07:40Z wrp $ # # 12-Dec-2007 - modified to allow compilation of both accelerated and # non-accelerated Smith-Waterman # the -DDEBUG option provides additional debugging information, particularly # with -D on the command line. # use -DBIG_LIB64 to generate 64-bit offsets in map_db .xin files SHELL=/bin/bash CC= gcc -g -O3 -arch i386 -msse2 LIB_DB= #CC= gcc -g -DDEBUG -arch i386 -msse2 #LIB_DB=-lz #CC= cc -g -Wall -pedantic # # standard line for normal searching CFLAGS= -DSHOW_HELP -DSHOWSIM -DM10_CONS -DUNIX -DTIMES -DHZ=100 -DMAX_WORKERS=4 -DTHR_EXIT=pthread_exit -DFASTA_HOST='"your.fasta.host"' -DIS_LITTLE_ENDIAN -DUSE_MMAP -DUSE_FSEEKO -DHAS_INTTYPES -DSAMP_STATS -DPGM_DOC -DBIG_LIB64 -DMAX_MEMK=2*1024*1024 # -I/usr/local/mysql/include -DMYSQL_DB # add for MySQL support #CFLAGS= -DSHOWSIM -DM10_CONS -DUNIX -DTIMES -DHZ=60 -DMAX_WORKERS=4 -DTHR_EXIT=pthread_exit -DPROGRESS -DFASTA_HOST='"your.fasta.host"' -DIS_LITTLE_ENDIAN -DUSE_MMAP -DUSE_FSEEKO -DHAS_INTTYPES -DSAMP_STATS -DPGM_DOC -DSUPERFAMNUM -DSFCHAR="'|'" LDFLAGS= -arch i386 HFLAGS= #for Linux, MacOS, DEC Unix V4.0 THR_SUBS = pthr_subs2 THR_LIBS = THR_CC = BIN = ../bin #XDIR = ${HOME}/bin #XDIR = /home/slib/bin/MACOSX/ #XDIR = /Users/seqprg/bin XDIR = /seqprg/bin #XDIR = ./i386 # diectory for universal binary process UDIR = $(BIN)/i386 # set up files for SSE2/Altivec acceleration # include ../make/Makefile.sse_alt # Altivec acceleration # DROPGSW_O = $(DROPGSW_SSE_O) DROPLAL_O = $(DROPLAL_SSE_O) DROPGNW_O = $(DROPGNW_NA_O) DROPLNW_O = $(DROPLNW_NA_O) # provide mysql function #include ../make/Makefile36m.common_mysql # no mysql include ../make/Makefile36m.common fasta36-36.3.8i_14-Nov-2020/make/Makefile.os_x86_64000066400000000000000000000031001433453312700206720ustar00rootroot00000000000000# makefile for fasta3, fasta3_t. Use makefile.pvm for pvcompxx. # # $Name: $ - $Id: Makefile.os_x86_64 1228 2013-09-26 19:46:29Z wrp $ # # 12-Dec-2007 - modified to allow compilation of both accelerated and # non-accelerated Smith-Waterman # the -DDEBUG option provides additional debugging information, particularly # with -D on the command line. # use -DBIG_LIB64 to generate 64-bit offsets in map_db .xin files SHELL=/bin/bash CC= cc -O -g -arch x86_64 -msse2 -Wno-pointer-sign LIB_DB= #CC= cc -g -DDEBUG -fsanitize=address -arch x86_64 -msse2 #LIB_DB=-lz #CC= cc -g -Wall -pedantic # # standard line for normal searching CFLAGS= -DSHOW_HELP -DSHOWSIM -DUNIX -DTIMES -DHZ=100 -DMAX_WORKERS=4 -DTHR_EXIT=pthread_exit -DM10_CONS -DFASTA_HOST='"your.fasta.host.here"' -DIS_LITTLE_ENDIAN -DUSE_MMAP -DUSE_FSEEKO -DHAS_INTTYPES -DSAMP_STATS -DPGM_DOC -DBIG_LIB64 -DLIB_MEM=12 #-DSHOW_ALIGN_SCORE # -I/usr/include/mysql -DMYSQL_DB # add for MySQL support LDFLAGS= -arch x86_64 HFLAGS= #for Linux, MacOS, DEC Unix V4.0 THR_SUBS = pthr_subs2 THR_LIBS = THR_CC = BIN = ../bin #XDIR = ${HOME}/bin #XDIR = /home/slib/bin/MACOSX/ #XDIR = /Users/seqprg/bin XDIR = /seqprg/bin #XDIR = ./x86_64 # directory for universal binary process UDIR = $(BIN)/x86_64 # set up files for SSE2/Altivec acceleration # include ../make/Makefile.sse_alt # Altivec acceleration # DROPGSW_O = $(DROPGSW_SSE_O) DROPLAL_O = $(DROPLAL_SSE_O) DROPGNW_O = $(DROPGNW_SSE_O) DROPLNW_O = $(DROPLNW_SSE_O) # provide mysql function #include ../make/Makefile36m.common_mysql # no mysql include ../make/Makefile36m.common fasta36-36.3.8i_14-Nov-2020/make/Makefile.os_x86_clang000066400000000000000000000033341433453312700215360ustar00rootroot00000000000000# makefile for fasta3, fasta3_t. Use makefile.pvm for pvcompxx. # # $Name: $ - $Id: Makefile.os_x86_clang 581 2011-02-28 03:45:26Z wrp $ # # 12-Dec-2007 - modified to allow compilation of both accelerated and # non-accelerated Smith-Waterman # the -DDEBUG option provides additional debugging information, particularly # with -D on the command line. # use -DBIG_LIB64 to generate 64-bit offsets in map_db .xin files SHELL=/bin/bash CC= clang -g -O -arch x86_64 -msse2 LIB_DB= #CC= clang -g -DDEBUG -arch x86_64 -msse2 #LIB_DB=-lz #CC= cc -g -Wall -pedantic # # standard line for normal searching CFLAGS= -DSHOWSIM -DM10_CONS -DUNIX -DTIMES -DHZ=100 -DMAX_WORKERS=4 -DTHR_EXIT=pthread_exit -DFASTA_HOST='"xs00.achs.virginia.edu/fasta_www/cgi"' -DIS_LITTLE_ENDIAN -DUSE_MMAP -DUSE_FSEEKO -DHAS_INTTYPES -DSAMP_STATS -DPGM_DOC -DBIG_LIB64 # -I/usr/local/mysql/include -DMYSQL_DB # add for MySQL support #CFLAGS= -DSHOWSIM -DM10_CONS -DUNIX -DTIMES -DHZ=60 -DMAX_WORKERS=4 -DTHR_EXIT=pthread_exit -DPROGRESS -DFASTA_HOST='"xs00.achs.virginia.edu/fasta_www/cgi"' -DIS_LITTLE_ENDIAN -DUSE_MMAP -DUSE_FSEEKO -DHAS_INTTYPES -DSAMP_STATS -DPGM_DOC -DSUPERFAMNUM -DSFCHAR="'|'" LDFLAGS= -arch x86_64 HFLAGS= #for Linux, MacOS, DEC Unix V4.0 THR_SUBS = pthr_subs2 THR_LIBS = THR_CC = BIN = ../bin #XDIR = ${HOME}/bin #XDIR = /home/slib/bin/MACOSX/ #XDIR = /Users/seqprg/bin XDIR = /seqprg/bin #XDIR = ./x86_64 # diectory for universal binary process UDIR = $(BIN)/x86_64 # set up files for SSE2/Altivec acceleration # include ../make/Makefile.sse_alt # Altivec acceleration # DROPGSW_O = $(DROPGSW_SSE_O) DROPLAL_O = $(DROPLAL_SSE_O) # provide mysql function #include ../make/Makefile36m.common_mysql # no mysql include ../make/Makefile36m.common fasta36-36.3.8i_14-Nov-2020/make/Makefile.os_x86_icc000066400000000000000000000034071433453312700212110ustar00rootroot00000000000000# makefile for fasta3, fasta3_t. Use makefile.pvm for pvcompxx. # # $Name: $ - $Id: Makefile.os_x86_icc 488 2011-01-21 17:38:53Z wrp $ # # 12-Dec-2007 - modified to allow compilation of both accelerated and # non-accelerated Smith-Waterman # the -DDEBUG option provides additional debugging information, particularly # with -D on the command line. # use -DBIG_LIB64 to generate 64-bit offsets in map_db .xin files SHELL=/bin/bash CC= icc -g -O -m64 # intel icc compiler LIB_DB= #CC= icc -g -DDEBUG -m64 #LIB_DB=-lz #CC= cc -g -Wall -pedantic # # standard line for normal searching CFLAGS= -DSHOWSIM -DM10_CONS -DUNIX -DTIMES -DHZ=100 -DMAX_WORKERS=4 -DTHR_EXIT=pthread_exit -DFASTA_HOST='"xs00.achs.virginia.edu/fasta_www/cgi"' -DIS_LITTLE_ENDIAN -DUSE_MMAP -DUSE_FSEEKO -DHAS_INTTYPES -DSAMP_STATS -DPGM_DOC -DBIG_LIB64 # -I/usr/local/mysql/include -DMYSQL_DB # add for MySQL support #CFLAGS= -DSHOWSIM -DM10_CONS -DUNIX -DTIMES -DHZ=60 -DMAX_WORKERS=4 -DTHR_EXIT=pthread_exit -DPROGRESS -DFASTA_HOST='"xs00.achs.virginia.edu/fasta_www/cgi"' -DIS_LITTLE_ENDIAN -DUSE_MMAP -DUSE_FSEEKO -DHAS_INTTYPES -DSAMP_STATS -DPGM_DOC -DSUPERFAMNUM -DSFCHAR="'|'" LDFLAGS= -arch x86_64 HFLAGS= #for Linux, MacOS, DEC Unix V4.0 THR_SUBS = pthr_subs2 THR_LIBS = THR_CC = BIN = ../bin #XDIR = ${HOME}/bin #XDIR = /home/slib/bin/MACOSX/ #XDIR = /Users/seqprg/bin XDIR = /seqprg/bin #XDIR = ./x86_64 # diectory for universal binary process UDIR = $(BIN)/x86_64 # set up files for SSE2/Altivec acceleration # include ../make/Makefile.sse_alt # Altivec acceleration # DROPGSW_O = $(DROPGSW_SSE_O) DROPLAL_O = $(DROPLAL_SSE_O) DROPGNW_O = $(DROPGNW_SSE_O) DROPLNW_O = $(DROPLNW_SSE_O) # provide mysql function #include ../make/Makefile36m.common_mysql # no mysql include ../make/Makefile36m.common fasta36-36.3.8i_14-Nov-2020/make/Makefile.os_x_arm64000066400000000000000000000034751433453312700212330ustar00rootroot00000000000000# $ Id: $ # # makefile for fasta3, fasta3_t Use Makefile.mpi for fasta36_mpi # # This file is designed for 64-bit Linux systems using an X86 # architecture with SSE2 extensions. -D_LARGEFILE64_SOURCE and # -DBIG_LIB64 require a 64-bit linux system. # SSE2 extensions are used for ssearch35(_t) # # Use Makefile.linux32_sse2 for 32-bit linux x86 # SHELL=/bin/bash CC = cc -O -g -arch arm64 -Wno-pointer-sign LIB_DB= #CC= gcc -pg -g -O -msse2 -ffast-math #CC = gcc -g -DDEBUG -msse2 #CC=gcc -Wall -pedantic -ansi -g -msse2 -DDEBUG # EBI uses the following with pgcc, -O3 does not work: # CC= pgcc -O2 -pipe -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer # this file works for x86 LINUX # standard options CFLAGS= -DSHOW_HELP -DSHOWSIM -DUNIX -DTIMES -DHZ=100 -DMAX_WORKERS=4 -DMAX_MEMK=2*1024*1024 -DTHR_EXIT=pthread_exit -DM10_CONS -D_REENTRANT -DHAS_INTTYPES -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DUSE_FSEEKO -DSAMP_STATS -DPGM_DOC -DUSE_MMAP -D_LARGEFILE64_SOURCE -DBIG_LIB64 # -I/usr/include/mysql -DMYSQL_DB # -DSUPERFAMNUM -DSFCHAR="'|'" # #(for mySQL databases) (also requires change to Makefile36m.common or use of Makefile36m.common_mysql) # run 'mysql_config' so find locations of mySQL files LIB_M = -lm # for mySQL databases # LIB_M = -L/usr/lib64/mysql -lmysqlclient -lm HFLAGS= # for Linux THR_SUBS = pthr_subs2 THR_LIBS = -lpthread THR_CC = BIN = ../bin XDIR = /seqprg/bin #XDIR = ~/bin/LINUX # directory for universal binary process UDIR = $(BIN)/arm64 # set up files for SSE2/Altivec acceleration # include ../make/Makefile.sse_alt # SSE2 acceleration # DROPGSW_O = $(DROPGSW_SSE_O) DROPLAL_O = $(DROPLAL_SSE_O) DROPGNW_O = $(DROPGNW_SSE_O) DROPLNW_O = $(DROPLNW_SSE_O) # renamed (fasta36) programs include ../make/Makefile36m.common # conventional (fasta3) names # include ../make/Makefile.common fasta36-36.3.8i_14-Nov-2020/make/Makefile.pLinux000066400000000000000000000037771433453312700205360ustar00rootroot00000000000000# $Name: $ - $Id: Makefile.pLinux 488 2011-01-21 17:38:53Z wrp $ # # makefile for fasta3, fasta3_t. Use makefile.pvm for pvcompxx. # this file works for DEC Alphas # # this file supports mmap()'ed databases in BLAST2 format use -DUSE_MMAP # for mmap()ed BLAST2 format. # the -DDEBUG option provides additional debugging information, particularly # with -D on the command line. # use -DBIG_LIB64 to generate and use 64-bit offsets in map_db .xin # files # for Tru64 4.0F, no "" 4.0G has inttypes.h CC= xlc_r #CC= cc -g3 -O -std1 #CC= insure -g -DDEBUG #CC= cc -g -DDEBUG -std1 #CC= gcc -g -Wall # # standard line for normal searching CFLAGS= -O3 -qtune=auto -qarch=auto -DUNIX -DTIMES -DBIGMEM -DMAX_WORKERS=4 -DSFCHAR="':'" -DTHR_EXIT=pthread_exit -DUSE_MMAP -DIS_BIG_ENDIAN -DSAMP_STATS -DPGM_DOC -D_LARGE_FILES -DHAS_INTTYPES -D__pLinux__ -DBIG_LIB64 # #(-DMYSQL_DB for mySQL databases) (also requires change to Makefile35.common) # special options for SUPERFAMLIES #CFLAGS= -DM10_CONS -DUNIX -DTIMES -DHZ=60 -DBIGMEM -DSFCHAR="'|'" -DMAX_WORKERS=4 -DTHR_EXIT=pthread_exit -DPROGRESS -DSUPERFAMNUM -DIS_LITTLE_ENDIAN -DUSE_MMAP -DMAXBEST=200000 LIB_M = -lm #LIB_M = -L/usr/local/lib/mysql -lmysqlclient -lm # for mySQL databases HFLAGS= #for DEC Unix V4.0 #THR_SUBS = pthr_subs2 #THR_LIBS = -lpthreads #THR_CC = #for Sun #THR_SUBS = uthr_subs #THR_LIBS = -lthread #THR_CC = # # for SGI with current pthreads #THR_SUBS = pthr_subs #THR_LIBS = -lpthreads #THR_CC = # # for IBM with current pthreads #CC= xlc_r -v -g #THR_SUBS = ibm_pthr_subs #THR_LIBS = -lpthreads #THR_CC = # for IBM Linux with current pthreads THR_SUBS = pthr_subs2 THR_LIBS = -lpthread BIN = ../bin XDIR = /seqprg/slib/bin # set up files for SSE2/Altivec acceleration # include ../make/Makefile.sse_alt # no acceleration # DROPGSW_O = $(DROPGSW_NA_O) DROPLAL_O = $(DROPLAL_NA_O) DROPGNW_O = $(DROPGNW_NA_O) DROPLNW_O = $(DROPLNW_NA_O) # renamed (fasta34) programs #include ../make/Makefile36m.common_sql include ../make/Makefile36m.common fasta36-36.3.8i_14-Nov-2020/make/Makefile.pLinux_sql000066400000000000000000000040031433453312700213740ustar00rootroot00000000000000# $Name: $ - $Id: Makefile.pLinux_sql 488 2011-01-21 17:38:53Z wrp $ # # makefile for fasta3, fasta3_t. Use makefile.pvm for pvcompxx. # this file works for DEC Alphas # # this file supports mmap()'ed databases in BLAST2 format use -DUSE_MMAP # for mmap()ed BLAST2 format. # the -DDEBUG option provides additional debugging information, particularly # with -D on the command line. # use -DBIG_LIB64 to generate and use 64-bit offsets in map_db .xin # files # for Tru64 4.0F, no "" 4.0G has inttypes.h CC= xlc_r #CC= cc -g3 -O -std1 #CC= insure -g -DDEBUG #CC= cc -g -DDEBUG -std1 #CC= gcc -g -Wall # CFLAGS= -O3 -qtune=auto -qarch=auto -DUNIX -DTIMES -DBIGMEM -DMAX_WORKERS=4 -DSFCHAR="':'" -DTHR_EXIT=pthread_exit -DUSE_MMAP -DIS_BIG_ENDIAN -DSAMP_STATS -DPGM_DOC -D_LARGE_FILES -DHAS_INTTYPES -D__pLinux__ -DFASTA_HOST='"fasta.bioch.virginia.edu/fasta/cgi"' -I/usr/include/mysql -DMYSQL_DB # #(-DMYSQL_DB for mySQL databases) (also requires change to Makefile35.common) # special options for SUPERFAMLIES #CFLAGS= -DM10_CONS -DUNIX -DTIMES -DHZ=60 -DBIGMEM -DSFCHAR="'|'" -DMAX_WORKERS=4 -DTHR_EXIT=pthread_exit -DPROGRESS -DSUPERFAMNUM -DIS_LITTLE_ENDIAN -DUSE_MMAP -DMAXBEST=200000 #LIB_M = -lm LIB_M = -L/usr/local/lib/mysql -lmysqlclient -lm # for mySQL databases HFLAGS= #for DEC Unix V4.0 #THR_SUBS = pthr_subs2 #THR_LIBS = -threads #THR_CC = #for Sun #THR_SUBS = uthr_subs #THR_LIBS = -lthread #THR_CC = # # for SGI with current pthreads #THR_SUBS = pthr_subs #THR_LIBS = -lpthreads #THR_CC = # # for IBM with current pthreads #CC= xlc_r -v -g #THR_SUBS = ibm_pthr_subs #THR_LIBS = -lpthreads #THR_CC = # for IBM Linux with current pthreads THR_SUBS = pthr_subs2 THR_LIBS = -lpthread BIN = ../bin XDIR = /seqprg/slib/bin # set up files for SSE2/Altivec acceleration # include ../make/Makefile.sse_alt # no acceleration # DROPGSW_O = $(DROPGSW_NA_O) DROPLAL_O = $(DROPLAL_NA_O) DROPGNW_O = $(DROPGNW_NA_O) DROPLNW_O = $(DROPLNW_NA_O) # renamed (fasta34) programs include ../make/Makefile36m.common_sql fasta36-36.3.8i_14-Nov-2020/make/Makefile.pcom000066400000000000000000000566231433453312700202130ustar00rootroot00000000000000 # combinations of files for "composite" drop* functions # DROPNSW_O = dropnsw.o lwm_align.o calcons_sw.o DROPNFA_O = drop_nfa.o lwm_align.o calcons_fa.o DROPGGL_O = drop_nfa.o gwm_align.o calcons_fa.o DROPBD_O = dropsbd.o wm_align.o calcons_fa.o DROPTFA_O = drop_tfa.o wm_align.o calcons_tfa.o DROPFF_O = drop_ff2.o calcons_ff.o DROPFS_O = drop_fs2.o calcons_fs.o DROPFM_O = drop_fm.o calcons_fm.o DROPTFF_O = drop_tff.o calcons_tff.o DROPTFS_O = drop_tfs.o calcons_tfs.o DROPTFM_O = drop_tfm.o calcons_tfm.o #COMPACC_TO = compacc.o # used with comp_lib5.c/comp_lib7.c #COMPACC_SO = compacc.o COMPACC_TO = compacc2_t.o # used with comp_lib5e.c/comp_lib7e.c/comp_lib8.c COMPACC_SO = compacc2_s.o SHOWBESTC = mshowbest.c SHOWBESTO = showbest.o build_ares.o SHOWALIGN = mshowalign2 SHOWALIGN_T = mshowalign2_t SHOWALIGN_S = mshowalign2_s LSHOWALIGN = lshowalign MWH = mw.h MWHP = mw.h TPROGS = ssearch36_t fasta36_t fasts36_t fastx36_t tfastx36_t fasty36_t tfasty36_t tfasts36_t fastm36_t fastf36_t tfastf36_t glsearch36_t ggsearch36_t SPROGS = fasta36 ssearch36 lalign36 fasts36 fastx36 tfastx36 fasty36 tfasty36 tfasts36 fastm36 tfastm36 fastf36 tfastf36 glsearch36 ggsearch36 APROGS = map_db XTPROGS = fastx36_t tfastx36_t fasty36_t tfasty36_t XPROGS = fastx36 tfastx36 fasty36 tfasty36 PROGS = $(SPROGS) $(TPROGS) $(APROGS) all: $(PROGS) tall: $(TPROGS) sall: $(SPROGS) xall: $(XTPROGS) $(XPROGS) $(ZTPROGS) $(ZPROGS) clean-up: rm -f *.o $(PROGS) $(APROGS); rm -rf $(BIN)/* install: $(PROGS) pushd $(BIN); cp $(PROGS) $(XDIR); popd uinstall: $(PROGS) pushd $(BIN); cp $(PROGS) $(UDIR); popd sinstall: $(SPROGS) pushd $(BIN); cp $(SPROGS) $(XDIR); popd tinstall: $(TPROGS) pushd $(BIN); cp $(TPROGS) $(XDIR); popd fasta36 : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_fa.o scale_se.o karlin.o $(DROPNFA_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(CC) $(HFLAGS) -o $(BIN)/fasta36 $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_fa.o $(DROPNFA_O) scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o $(LIB_M) $(LIB_DB) fastx36 : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_fx.o scale_se.o karlin.o drop_fx.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o url_subs.o mrandom.o $(CC) $(HFLAGS) -o $(BIN)/fastx36 $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_fx.o drop_fx.o scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o url_subs.o mrandom.o $(LIB_M) $(LIB_DB) fasty36 : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_fy.o scale_se.o karlin.o drop_fz.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o url_subs.o mrandom.o $(CC) $(HFLAGS) -o $(BIN)/fasty36 $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_fy.o drop_fz.o scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o url_subs.o mrandom.o $(LIB_M) $(LIB_DB) fastf36 : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_ff.o scaleswts.o last_tat.o tatstats_ff.o karlin.o $(DROPFF_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(CC) $(HFLAGS) -o $(BIN)/fastf36 $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_ff.o $(DROPFF_O) scaleswts.o last_tat.o tatstats_ff.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(LIB_M) $(LIB_DB) fasts36 : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_fs.o scaleswts.o last_tat.o tatstats_fs.o karlin.o $(DROPFS_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(CC) $(HFLAGS) -o $(BIN)/fasts36 $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_fs.o $(DROPFS_O) scaleswts.o last_tat.o tatstats_fs.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(LIB_M) $(LIB_DB) fastm36 : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_fm.o scaleswts.o last_tat.o tatstats_fm.o karlin.o $(DROPFM_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(CC) $(HFLAGS) -o $(BIN)/fastm36 $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_fm.o $(DROPFM_O) scaleswts.o last_tat.o tatstats_fm.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(LIB_M) $(LIB_DB) tfastx36 : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_tfx.o scale_se.o karlin.o drop_tfx.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o url_subs.o mrandom.o $(CC) $(HFLAGS) -o $(BIN)/tfastx36 $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_tfx.o drop_tfx.o scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o url_subs.o mrandom.o $(LIB_M) $(LIB_DB) tfasty36 : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_tfy.o scale_se.o karlin.o drop_tfz.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o url_subs.o mrandom.o $(CC) $(HFLAGS) -o $(BIN)/tfasty36 $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_tfy.o drop_tfz.o scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o url_subs.o mrandom.o $(LIB_M) $(LIB_DB) tfastf36 : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_tf.o scaleswtf.o last_tat.o tatstats_ff.o karlin.o $(DROPTFF_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o mrandom.o url_subs.o $(CC) $(HFLAGS) -o $(BIN)/tfastf36 $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_tf.o $(DROPTFF_O) scaleswtf.o last_tat.o tatstats_ff.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o mrandom.o url_subs.o $(LIB_M) $(LIB_DB) tfastf36s : $(COMP_LIBO) $(COMPACC_SO) showsum.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_tf.o scaleswtf.o karlin.o $(DROPTFF_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o mrandom.o url_subs.o $(CC) $(HFLAGS) -o $(BIN)/tfastf36s $(COMP_LIBO) $(COMPACC_SO) showsum.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_tf.o $(DROPTFF_O) scaleswtf.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o mrandom.o url_subs.o $(LIB_M) $(LIB_DB) tfasts36 : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_tfs.o scaleswts.o tatstats_fs.o last_tat.o karlin.o $(DROPTFS_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o mrandom.o url_subs.o $(CC) $(HFLAGS) -o $(BIN)/tfasts36 $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_tfs.o $(DROPTFS_O) scaleswts.o tatstats_fs.o last_tat.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o mrandom.o url_subs.o $(LIB_M) $(LIB_DB) tfastm36 : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_tfm.o scaleswts.o tatstats_fm.o last_tat.o karlin.o $(DROPTFM_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o mrandom.o url_subs.o $(CC) $(HFLAGS) -o $(BIN)/tfastm36 $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_tfm.o $(DROPTFM_O) scaleswts.o tatstats_fm.o last_tat.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o mrandom.o url_subs.o $(LIB_M) $(LIB_DB) ssearch36 : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o scale_se.o karlin.o $(DROPGSW_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(CC) $(HFLAGS) -o $(BIN)/ssearch36 $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o $(DROPGSW_O) scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(LIB_M) $(LIB_DB) # do not use accelerated Smith-Waterman ssearch36s : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o scale_se.o karlin.o $(DROPGSW_NA_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(CC) $(HFLAGS) -o $(BIN)/ssearch36s $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o $(DROPGSW_NA_O) scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(LIB_M) $(LIB_DB) lalign36 : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(LSHOWALIGN).o htime.o apam.o doinit.o init_lal.o scale_se.o karlin.o last_thresh.o $(DROPLAL_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(CC) $(HFLAGS) -o $(BIN)/lalign36 $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(LSHOWALIGN).o htime.o apam.o doinit.o init_lal.o $(DROPLAL_O) scale_se.o karlin.o last_thresh.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(LIB_M) $(LIB_DB) osearch36 : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_ssw.o scale_se.o karlin.o $(DROPNSW_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o $(CC) $(HFLAGS) -o $(BIN)/osearch36 $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_ssw.o $(DROPNSW_O) scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o $(LIB_M) $(LIB_DB) glsearch36 : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o scale_sn.o karlin.o $(DROPLNW_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(CC) $(HFLAGS) -o $(BIN)/glsearch36 $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o $(DROPLNW_O) scale_sn.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(LIB_M) $(LIB_DB) ggsearch36 : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o scale_sn.o karlin.o $(DROPGNW_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(CC) $(HFLAGS) -o $(BIN)/ggsearch36 $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o $(DROPGNW_O) scale_sn.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(LIB_M) $(LIB_DB) prss36 : ssearch36 ln -sf ssearch36 prss36 ssearch36_t : $(COMP_THRO) ${WORK_THRO} $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o scale_se.o karlin.o $(DROPGSW_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(CC) $(HFLAGS) -o $(BIN)/ssearch36_t $(COMP_THRO) ${WORK_THRO} $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o $(DROPGSW_O) scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(LIB_M) $(LIB_DB) $(THR_LIBS) ssearch36s_t : $(COMP_THRO) ${WORK_THRO} $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o scale_se.o karlin.o $(DROPGSW_NA_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(CC) $(HFLAGS) -o $(BIN)/ssearch36s_t $(COMP_THRO) ${WORK_THRO} $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o $(DROPGSW_NA_O) scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(LIB_M) $(LIB_DB) $(THR_LIBS) glsearch36_t : $(COMP_THRO) ${WORK_THRO} $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o scale_sn.o karlin.o $(DROPLNW_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(CC) $(HFLAGS) -o $(BIN)/glsearch36_t $(COMP_THRO) ${WORK_THRO} $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o $(DROPLNW_O) scale_sn.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(LIB_M) $(LIB_DB) $(THR_LIBS) glsearch36s_t : $(COMP_THRO) ${WORK_THRO} $(THR_SUBS).o $(COMPACC_TO) showsum.o re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o scale_sn.o karlin.o $(DROPLNW_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(CC) $(HFLAGS) -o $(BIN)/glsearch36s_t $(COMP_THRO) ${WORK_THRO} $(THR_SUBS).o $(COMPACC_TO) showsum.o re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o $(DROPLNW_O) scale_sn.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(LIB_M) $(LIB_DB) $(THR_LIBS) ggsearch36_t : $(COMP_THRO) ${WORK_THRO} $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o scale_sn.o karlin.o $(DROPGNW_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(CC) $(HFLAGS) -o $(BIN)/ggsearch36_t $(COMP_THRO) ${WORK_THRO} $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o $(DROPGNW_O) scale_sn.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(LIB_M) $(LIB_DB) $(THR_LIBS) ggsearch36s_t : $(COMP_THRO) ${WORK_THRO} $(THR_SUBS).o $(COMPACC_TO) showsum.o re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o scale_sn.o karlin.o $(DROPGNW_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(CC) $(HFLAGS) -o $(BIN)/ggsearch36s_t $(COMP_THRO) ${WORK_THRO} $(THR_SUBS).o $(COMPACC_TO) showsum.o re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o $(DROPGNW_O) scale_sn.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(LIB_M) $(LIB_DB) $(THR_LIBS) fasta36_t : $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_fa.o scale_se.o karlin.o $(DROPNFA_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o $(CC) $(HFLAGS) -o $(BIN)/fasta36_t $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_fa.o $(DROPNFA_O) scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o $(LIB_M) $(LIB_DB) $(THR_LIBS) fasta36sum_t : $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) showsum.o re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_fa.o scale_se.o karlin.o $(DROPNFA_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o $(CC) $(HFLAGS) -o $(BIN)/fasta36sum_t $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) showsum.o re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_fa.o $(DROPNFA_O) scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o $(LIB_M) $(LIB_DB) $(THR_LIBS) fasta36u_t : $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) showun.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_fa.o scale_se.o karlin.o $(DROPNFA_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(CC) $(HFLAGS) -o $(BIN)/fasta36u_t $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) showun.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_fa.o $(DROPNFA_O) scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(LIB_M) $(LIB_DB) $(THR_LIBS) fasta36r_t : $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) showrel.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_fa.o scale_se.o karlin.o $(DROPNFA_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(CC) $(HFLAGS) -o $(BIN)/fasta36r_t $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) showrel.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_fa.o $(DROPNFA_O) scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(LIB_M) $(LIB_DB) $(THR_LIBS) fastf36_t : $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_ff.o scaleswtf.o last_tat.o tatstats_ff.o karlin.o $(DROPFF_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(CC) $(HFLAGS) -o $(BIN)/fastf36_t $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_ff.o $(DROPFF_O) scaleswtf.o last_tat.o tatstats_ff.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(LIB_M) $(LIB_DB) $(THR_LIBS) fastf36s_t : $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) showsum.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_ff.o scaleswtf.o karlin.o $(DROPFF_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(CC) $(HFLAGS) -o $(BIN)/fastf36s_t $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) showsum.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_ff.o $(DROPFF_O) scaleswtf.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(LIB_M) $(LIB_DB) $(THR_LIBS) fasts36_t : $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_fs.o scaleswts.o last_tat.o tatstats_fs.o karlin.o $(DROPFS_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(CC) $(HFLAGS) -o $(BIN)/fasts36_t $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_fs.o $(DROPFS_O) scaleswts.o last_tat.o tatstats_fs.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(LIB_M) $(LIB_DB) $(THR_LIBS) fastm36_t : $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_fm.o scaleswts.o last_tat.o tatstats_fm.o karlin.o $(DROPFM_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(CC) $(HFLAGS) -o $(BIN)/fastm36_t $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_fm.o $(DROPFM_O) scaleswts.o last_tat.o tatstats_fm.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(LIB_M) $(LIB_DB) $(THR_LIBS) fastx36_t : $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o c_dispn.o htime.o apam.o doinit.o init_fx.o faatran.o scale_se.o karlin.o drop_fx.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o $(CC) $(HFLAGS) -o $(BIN)/fastx36_t $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_fx.o drop_fx.o faatran.o scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o $(LIB_M) $(LIB_DB) $(THR_LIBS) fasty36_t : $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o c_dispn.o htime.o apam.o doinit.o init_fy.o faatran.o scale_se.o karlin.o drop_fz.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o $(CC) $(HFLAGS) -o $(BIN)/fasty36_t $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_fy.o drop_fz.o faatran.o scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o $(LIB_M) $(LIB_DB) $(THR_LIBS) tfasta36 : $(COMP_LIBO) compacc.o $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_tfa.o scale_se.o karlin.o $(DROPTFA_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o url_subs.o mrandom.o $(CC) $(HFLAGS) -o $(BIN)/tfasta36 $(COMP_LIBO) compacc.o $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_tfa.o $(DROPTFA_O) scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o url_subs.o mrandom.o $(LIB_M) $(LIB_DB) tfasta36_t : $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o c_dispn.o htime.o apam.o doinit.o init_tfa.o scale_se.o karlin.o $(DROPTFA_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o url_subs.o mrandom.o $(CC) $(HFLAGS) -o $(BIN)/tfasta36_t $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_tfa.o $(DROPTFA_O) scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o url_subs.o mrandom.o $(LIB_M) $(LIB_DB) $(THR_LIBS) tfastf36_t : $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o c_dispn.o htime.o apam.o doinit.o init_tf.o scaleswtf.o last_tat.o tatstats_ff.o karlin.o $(DROPTFF_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o mrandom.o url_subs.o $(CC) $(HFLAGS) -o $(BIN)/tfastf36_t $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_tf.o $(DROPTFF_O) scaleswtf.o last_tat.o tatstats_ff.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o mrandom.o url_subs.o $(LIB_M) $(LIB_DB) $(THR_LIBS) tfasts36_t : $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o c_dispn.o htime.o apam.o doinit.o init_tfs.o scaleswts.o last_tat.o tatstats_fs.o karlin.o $(DROPTFS_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o mrandom.o url_subs.o $(CC) $(HFLAGS) -o $(BIN)/tfasts36_t $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_tfs.o $(DROPTFS_O) scaleswts.o last_tat.o tatstats_fs.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o mrandom.o url_subs.o $(LIB_M) $(LIB_DB) $(THR_LIBS) tfastx36_t : $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_tfx.o scale_se.o karlin.o drop_tfx.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o url_subs.o mrandom.o $(CC) $(HFLAGS) -o $(BIN)/tfastx36_t $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_tfx.o drop_tfx.o scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o url_subs.o mrandom.o $(LIB_M) $(LIB_DB) $(THR_LIBS) tfasty36_t : $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_tfy.o scale_se.o karlin.o drop_tfz.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o url_subs.o mrandom.o $(CC) $(HFLAGS) -o $(BIN)/tfasty36_t $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_tfy.o drop_tfz.o scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o url_subs.o mrandom.o $(LIB_M) $(LIB_DB) $(THR_LIBS) comp_mlib9.o : comp_lib9.c mw.h structs.h defs.h param.h $(CC) $(THR_CC) $(CFLAGS) -DCOMP_MLIB -c comp_lib9.c -o comp_mlib9.o comp_mthr9.o : comp_lib9.c mw.h structs.h defs.h param.h thr_bufs2.h thr_buf_structs.h $(CC) $(THR_CC) $(CFLAGS) -DCOMP_THR -DCOMP_MLIB -c comp_lib9.c -o comp_mthr9.o work_thr2.o : work_thr2.c mw.h structs.h defs.h param.h thr_bufs2.h thr_buf_structs.h $(CC) $(THR_CC) $(CFLAGS) -c work_thr2.c print_pssm : print_pssm.c getseq.c karlin.c apam.cn pssm_asn_subs.c $(CC) $(CFLAGS) $(HFLAGS) -o print_pssm print_pssm.c getseq.c karlin.c apam.c pssm_asn_subs.c $(LIB_M) $(LIB_DB) map_db : map_db.c uascii.h ncbl2_head.h $(CC) $(CFLAGS) $(HFLAGS) -o $(BIN)/map_db map_db.c list_db : list_db.c $(CC) $(CFLAGS) $(HFLAGS) -o $(BIN)/list_db list_db.c lav2ps : lav2plt.o lavplt_ps.o $(CC) -DUNIX $(HFLAGS) -o $(BIN)/lav2ps lav2plt.o lavplt_ps.o -lm lav2svg : lav2plt.o lavplt_svg.o $(CC) -DUNIX $(HFLAGS) -o $(BIN)/lav2svg lav2plt.o lavplt_svg.o -lm fasta36-36.3.8i_14-Nov-2020/make/Makefile.pcom_s000066400000000000000000000272471433453312700205350ustar00rootroot00000000000000 # combinations of files for "composite" drop* functions # DROPNSW_O = dropnsw.o wm_align.o calcons_sw.o DROPNFA_O = drop_nfa.o wm_align.o calcons_fa.o DROPBD_O = dropsbd.o wm_align.o calcons_fa.o DROPTFA_O = drop_tfa.o wm_align.o calcons_tfa.o DROPFF_O = drop_ff2.o calcons_ff.o DROPFS_O = drop_fs2.o calcons_fs.o DROPFM_O = drop_fm.o calcons_fm.o DROPTFF_O = drop_tff.o calcons_tff.o DROPTFS_O = drop_tfs.o calcons_tfs.o DROPTFM_O = drop_tfm.o calcons_tfm.o #COMPACC_TO = compacc.o # used with comp_lib5.c/comp_lib7.c #COMPACC_SO = compacc.o COMPACC_TO = compacc2_t.o # used with comp_lib5e.c/comp_lib7e.c/comp_lib8.c COMPACC_SO = compacc2_s.o SHOWBESTC = mshowbest.c SHOWBESTO = showbest.o build_ares.o SHOWALIGN = mshowalign2 SHOWALIGN_T = mshowalign2_t SHOWALIGN_S = mshowalign2_s LSHOWALIGN = lshowalign MWH = mw.h MWHP = mw.h SPROGS = fasta36 ssearch36 lalign36 fasts36 fastx36 tfastx36 fasty36 tfasty36 tfasts36 fastm36 tfastm36 fastf36 tfastf36 glsearch36 ggsearch36 APROGS = map_db XPROGS = fastx36 tfastx36 fasty36 tfasty36 PROGS = $(SPROGS) $(APROGS) all: $(PROGS) tall: $(TPROGS) sall: $(SPROGS) xall: $(XPROGS) clean-up: rm -f *.o $(PROGS); rm -rf $(BIN)/* install: $(PROGS) pushd $(BIN); cp $(PROGS) $(XDIR); popd uinstall: $(PROGS) pushd $(BIN); cp $(PROGS) $(UDIR); popd sinstall: $(SPROGS) pushd $(BIN); cp $(SPROGS) $(XDIR); popd tinstall: $(TPROGS) pushd $(BIN); cp $(TPROGS) $(XDIR); popd fasta36 : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_fa.o scale_se.o karlin.o $(DROPNFA_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(CC) $(HFLAGS) $(BIN)/fasta36 $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_fa.o $(DROPNFA_O) scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o $(LIB_M) $(LIB_DB) fastx36 : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_fx.o scale_se.o karlin.o drop_fx.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o url_subs.o mrandom.o $(CC) $(HFLAGS) -o $(BIN)/fastx36 $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_fx.o drop_fx.o scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o url_subs.o mrandom.o $(LIB_M) $(LIB_DB) fasty36 : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_fy.o scale_se.o karlin.o drop_fz.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o url_subs.o mrandom.o $(CC) $(HFLAGS) -o $(BIN)/fasty36 $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_fy.o drop_fz.o scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o url_subs.o mrandom.o $(LIB_M) $(LIB_DB) fastf36 : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_ff.o scaleswts.o last_tat.o tatstats_ff.o karlin.o $(DROPFF_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(CC) $(HFLAGS) -o $(BIN)/fastf36 $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_ff.o $(DROPFF_O) scaleswts.o last_tat.o tatstats_ff.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(LIB_M) $(LIB_DB) fasts36 : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_fs.o scaleswts.o last_tat.o tatstats_fs.o karlin.o $(DROPFS_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(CC) $(HFLAGS) -o $(BIN)/fasts36 $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_fs.o $(DROPFS_O) scaleswts.o last_tat.o tatstats_fs.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(LIB_M) $(LIB_DB) fastm36 : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_fm.o scaleswts.o last_tat.o tatstats_fm.o karlin.o $(DROPFM_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(CC) $(HFLAGS) -o $(BIN)/fastm36 $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_fm.o $(DROPFM_O) scaleswts.o last_tat.o tatstats_fm.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(LIB_M) $(LIB_DB) tfastx36 : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_tfx.o scale_se.o karlin.o drop_tfx.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o url_subs.o mrandom.o $(CC) $(HFLAGS) -o $(BIN)/tfastx36 $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_tfx.o drop_tfx.o scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o url_subs.o mrandom.o $(LIB_M) $(LIB_DB) tfasty36 : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_tfy.o scale_se.o karlin.o drop_tfz.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o url_subs.o mrandom.o $(CC) $(HFLAGS) -o $(BIN)/tfasty36 $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_tfy.o drop_tfz.o scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o url_subs.o mrandom.o $(LIB_M) $(LIB_DB) tfasta36 : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_tfa.o scale_se.o karlin.o $(DROPTFA_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o url_subs.o mrandom.o $(CC) $(HFLAGS) -o $(BIN)/tfasta36 $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_tfa.o $(DROPTFA_O) scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o url_subs.o mrandom.o $(LIB_M) $(LIB_DB) tfastf36 : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_tf.o scaleswtf.o last_tat.o tatstats_ff.o karlin.o $(DROPTFF_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o mrandom.o url_subs.o $(CC) $(HFLAGS) -o $(BIN)/tfastf36 $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_tf.o $(DROPTFF_O) scaleswtf.o last_tat.o tatstats_ff.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o mrandom.o url_subs.o $(LIB_M) $(LIB_DB) tfastf36s : $(COMP_LIBO) $(COMPACC_SO) showsum.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_tf.o scaleswtf.o karlin.o $(DROPTFF_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o mrandom.o url_subs.o $(CC) $(HFLAGS) -o $(BIN)/tfastf36s $(COMP_LIBO) $(COMPACC_SO) showsum.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_tf.o $(DROPTFF_O) scaleswtf.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o mrandom.o url_subs.o $(LIB_M) $(LIB_DB) tfasts36 : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_tfs.o scaleswts.o tatstats_fs.o last_tat.o karlin.o $(DROPTFS_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o mrandom.o url_subs.o $(CC) $(HFLAGS) -o $(BIN)/tfasts36 $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_tfs.o $(DROPTFS_O) scaleswts.o tatstats_fs.o last_tat.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o mrandom.o url_subs.o $(LIB_M) $(LIB_DB) tfastm36 : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_tfm.o scaleswts.o tatstats_fm.o last_tat.o karlin.o $(DROPTFM_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o mrandom.o url_subs.o $(CC) $(HFLAGS) -o $(BIN)/tfastm36 $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_tfm.o $(DROPTFM_O) scaleswts.o tatstats_fm.o last_tat.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o mrandom.o url_subs.o $(LIB_M) $(LIB_DB) ssearch36 : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o scale_se.o karlin.o $(DROPGSW_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(CC) $(HFLAGS) -o $(BIN)/ssearch36 $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o $(DROPGSW_O) scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(LIB_M) $(LIB_DB) # do not use accelerated Smith-Waterman ssearch36s : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o scale_se.o karlin.o $(DROPGSW_NA_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(CC) $(HFLAGS) -o $(BIN)/ssearch36s $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o $(DROPGSW_NA_O) scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(LIB_M) $(LIB_DB) lalign36 : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(LSHOWALIGN).o htime.o apam.o doinit.o init_lal.o scale_se.o karlin.o last_thresh.o $(DROPLAL_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(CC) $(HFLAGS) -o $(BIN)/lalign36 $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(LSHOWALIGN).o htime.o apam.o doinit.o init_lal.o $(DROPLAL_O) scale_se.o karlin.o last_thresh.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(LIB_M) $(LIB_DB) osearch36 : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_ssw.o scale_se.o karlin.o $(DROPNSW_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o $(CC) $(HFLAGS) -o $(BIN)/osearch36 $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_ssw.o $(DROPNSW_O) scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o $(LIB_M) $(LIB_DB) glsearch36 : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o scale_sn.o karlin.o $(DROPLNW_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(CC) $(HFLAGS) -o $(BIN)/glsearch36 $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o $(DROPLNW_O) scale_sn.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(LIB_M) $(LIB_DB) ggsearch36 : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o scale_sn.o karlin.o $(DROPGNW_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(CC) $(HFLAGS) -o $(BIN)/ggsearch36 $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o $(DROPGNW_O) scale_sn.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(LIB_M) $(LIB_DB) prss36 : ssearch36 ln -sf ssearch36 prss36 comp_mlib9.o : comp_lib9.c mw.h structs.h defs.h param.h $(CC) $(THR_CC) $(CFLAGS) -DCOMP_MLIB -c comp_lib9.c -o comp_mlib9.o comp_mthr9.o : comp_lib9.c mw.h structs.h defs.h param.h thr_bufs2.h thr_buf_structs.h $(CC) $(THR_CC) $(CFLAGS) -DCOMP_THR -DCOMP_MLIB -c comp_lib9.c -o comp_mthr9.o work_thr2.o : work_thr2.c mw.h structs.h defs.h param.h thr_bufs2.h thr_buf_structs.h $(CC) $(THR_CC) $(CFLAGS) -c work_thr2.c print_pssm : print_pssm.c getseq.c karlin.c apam.c pssm_asn_subs.c $(CC) $(HFLAGS) -o print_pssm $(CFLAGS) print_pssm.c getseq.c karlin.c apam.c pssm_asn_subs.c $(LIB_M) $(LIB_DB) map_db : map_db.c uascii.h ncbl2_head.h $(CC) $(CFLAGS) $(HFLAGS) -o $(BIN)/map_db map_db.c list_db : list_db.c $(CC) $(CFLAGS) $(HFLAGS) -o $(BIN)/list_db list_db.c lav2ps : lav2plt.o lavplt_ps.o $(CC) -DUNIX $(HFLAGS) -o $(BIN)/lav2ps lav2plt.o lavplt_ps.o -lm lav2svg : lav2plt.o lavplt_svg.o $(CC) -DUNIX $(HFLAGS) -o $(BIN)/lav2svg lav2plt.o lavplt_svg.o -lm fasta36-36.3.8i_14-Nov-2020/make/Makefile.pcom_t000066400000000000000000000356151433453312700205340ustar00rootroot00000000000000 # combinations of files for "composite" drop* functions # DROPNSW_O = dropnsw.o wm_align.o calcons_sw.o DROPNFA_O = drop_nfa.o wm_align.o calcons_fa.o DROPBD_O = dropsbd.o wm_align.o calcons_fa.o DROPTFA_O = drop_tfa.o wm_align.o calcons_tfa.o DROPFF_O = drop_ff2.o calcons_ff.o DROPFS_O = drop_fs2.o calcons_fs.o DROPFM_O = drop_fm.o calcons_fm.o DROPTFF_O = drop_tff.o calcons_tff.o DROPTFS_O = drop_tfs.o calcons_tfs.o DROPTFM_O = drop_tfm.o calcons_tfm.o COMPACC_SO = compacc.o COMPACC_TO = compacc.o #COMPACC_TO = compacc.o # used with comp_lib5.c/comp_lib7.c #COMPACC_SO = compacc.o COMPACC_TO = compacc2_t.o # used with comp_lib5e.c/comp_lib7e.c/comp_lib8.c COMPACC_SO = compacc2_s.o SHOWBESTC = mshowbest.c SHOWBESTO = showbest.o build_ares.o SHOWALIGN = mshowalign2 SHOWALIGN_T = mshowalign2_t SHOWALIGN_S = mshowalign2_s LSHOWALIGN = lshowalign MWH = mw.h MWHP = mw.h TPROGS = fasta36 ssearch36 lalign36 fasts36 fastx36 tfastx36 fasty36 tfasty36 tfasts36 fastm36 tfastm36 fastf36 tfastf36 glsearch36 ggsearch36 APROGS = map_db PROGS = $(SPROGS) $(TPROGS) $(APROGS) all: $(PROGS) tall: $(TPROGS) clean-up: rm -f *.o $(PROGS); rm -rf $(BIN)/* install: $(PROGS) pushd $(BIN); cp $(PROGS) $(XDIR); popd uinstall: $(PROGS) pushd $(BIN); cp $(PROGS) $(UDIR); popd sinstall: $(SPROGS) pushd $(BIN); cp $(SPROGS) $(XDIR); popd tinstall: $(TPROGS) pushd $(BIN); cp $(TPROGS) $(XDIR); popd lalign36 : $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(LSHOWALIGN).o htime.o apam.o doinit.o init_lal.o scale_se.o karlin.o last_thresh.o $(DROPLAL_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(CC) $(HFLAGS) -o $(BIN)/lalign36 $(COMP_LIBO) $(COMPACC_SO) $(SHOWBESTO) re_getlib.o $(LSHOWALIGN).o htime.o apam.o doinit.o init_lal.o $(DROPLAL_O) scale_se.o karlin.o last_thresh.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(LIB_M) $(LIB_DB) ssearch36 : $(COMP_THRO) ${WORK_THRO} $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o scale_se.o karlin.o $(DROPGSW_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(CC) $(HFLAGS) -o $(BIN)/ssearch36 $(COMP_THRO) ${WORK_THRO} $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o $(DROPGSW_O) scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(LIB_M) $(LIB_DB) $(THR_LIBS) ssearch36s : $(COMP_THRO) ${WORK_THRO} $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o scale_se.o karlin.o $(DROPGSW_NA_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(CC) $(HFLAGS) -o $(BIN)/ssearch36s $(COMP_THRO) ${WORK_THRO} $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o $(DROPGSW_NA_O) scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(LIB_M) $(LIB_DB) $(THR_LIBS) glsearch36 : $(COMP_THRO) ${WORK_THRO} $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o scale_sn.o karlin.o $(DROPLNW_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(CC) $(HFLAGS) -o $(BIN)/glsearch36 $(COMP_THRO) ${WORK_THRO} $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o $(DROPLNW_O) scale_sn.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(LIB_M) $(LIB_DB) $(THR_LIBS) glsearch36s : $(COMP_THRO) ${WORK_THRO} $(THR_SUBS).o $(COMPACC_TO) showsum.o re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o scale_sn.o karlin.o $(DROPLNW_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(CC) $(HFLAGS) -o $(BIN)/glsearch36s $(COMP_THRO) ${WORK_THRO} $(THR_SUBS).o $(COMPACC_TO) showsum.o re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o $(DROPLNW_O) scale_sn.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(LIB_M) $(LIB_DB) $(THR_LIBS) ggsearch36 : $(COMP_THRO) ${WORK_THRO} $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o scale_sn.o karlin.o $(DROPGNW_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(CC) $(HFLAGS) -o $(BIN)/ggsearch36 $(COMP_THRO) ${WORK_THRO} $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o $(DROPGNW_O) scale_sn.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(LIB_M) $(LIB_DB) $(THR_LIBS) ggsearch36s : $(COMP_THRO) ${WORK_THRO} $(THR_SUBS).o $(COMPACC_TO) showsum.o re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o scale_sn.o karlin.o $(DROPGNW_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(CC) $(HFLAGS) -o $(BIN)/ggsearch36s $(COMP_THRO) ${WORK_THRO} $(THR_SUBS).o $(COMPACC_TO) showsum.o re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o $(DROPGNW_O) scale_sn.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o pssm_asn_subs.o $(LIB_M) $(LIB_DB) $(THR_LIBS) fasta36 : $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_fa.o scale_se.o karlin.o $(DROPNFA_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o $(CC) $(HFLAGS) -o $(BIN)/fasta36 $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_fa.o $(DROPNFA_O) scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o $(LIB_M) $(LIB_DB) $(THR_LIBS) fasta36sum : $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) showsum.o re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_fa.o scale_se.o karlin.o $(DROPNFA_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o $(CC) $(HFLAGS) -o $(BIN)/fasta36sum $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) showsum.o re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_fa.o $(DROPNFA_O) scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o $(LIB_M) $(LIB_DB) $(THR_LIBS) fasta36u : $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) showun.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_fa.o scale_se.o karlin.o $(DROPNFA_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(CC) $(HFLAGS) -o $(BIN)/fasta36u $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) showun.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_fa.o $(DROPNFA_O) scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(LIB_M) $(LIB_DB) $(THR_LIBS) fasta36r : $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) showrel.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_fa.o scale_se.o karlin.o $(DROPNFA_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(CC) $(HFLAGS) -o $(BIN)/fasta36r $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) showrel.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_fa.o $(DROPNFA_O) scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(LIB_M) $(LIB_DB) $(THR_LIBS) fastf36 : $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_ff.o scaleswtf.o last_tat.o tatstats_ff.o karlin.o $(DROPFF_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(CC) $(HFLAGS) -o $(BIN)/fastf36 $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_ff.o $(DROPFF_O) scaleswtf.o last_tat.o tatstats_ff.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(LIB_M) $(LIB_DB) $(THR_LIBS) fastf36s : $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) showsum.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_ff.o scaleswtf.o karlin.o $(DROPFF_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(CC) $(HFLAGS) -o $(BIN)/fastf36s $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) showsum.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_ff.o $(DROPFF_O) scaleswtf.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(LIB_M) $(LIB_DB) $(THR_LIBS) fasts36 : $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_fs.o scaleswts.o last_tat.o tatstats_fs.o karlin.o $(DROPFS_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(CC) $(HFLAGS) -o $(BIN)/fasts36 $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_fs.o $(DROPFS_O) scaleswts.o last_tat.o tatstats_fs.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(LIB_M) $(LIB_DB) $(THR_LIBS) fastm36 : $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_fm.o scaleswts.o last_tat.o tatstats_fm.o karlin.o $(DROPFM_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(CC) $(HFLAGS) -o $(BIN)/fastm36 $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_fm.o $(DROPFM_O) scaleswts.o last_tat.o tatstats_fm.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o mrandom.o url_subs.o $(LIB_M) $(LIB_DB) $(THR_LIBS) fastx36 : $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o c_dispn.o htime.o apam.o doinit.o init_fx.o faatran.o scale_se.o karlin.o drop_fx.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o $(CC) $(HFLAGS) -o $(BIN)/fastx36 $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_fx.o drop_fx.o faatran.o scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o $(LIB_M) $(LIB_DB) $(THR_LIBS) fasty36 : $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o c_dispn.o htime.o apam.o doinit.o init_fy.o faatran.o scale_se.o karlin.o drop_fz.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o $(CC) $(HFLAGS) -o $(BIN)/fasty36 $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_fy.o drop_fz.o faatran.o scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o url_subs.o mrandom.o $(LIB_M) $(LIB_DB) $(THR_LIBS) tfasta36 : $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o c_dispn.o htime.o apam.o doinit.o init_tfa.o scale_se.o karlin.o $(DROPTFA_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o url_subs.o mrandom.o $(CC) $(HFLAGS) -o $(BIN)/tfasta36 $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_tfa.o $(DROPTFA_O) scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o url_subs.o mrandom.o $(LIB_M) $(LIB_DB) $(THR_LIBS) tfastf36 : $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o c_dispn.o htime.o apam.o doinit.o init_tf.o scaleswtf.o last_tat.o tatstats_ff.o karlin.o $(DROPTFF_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o mrandom.o url_subs.o $(CC) $(HFLAGS) -o $(BIN)/tfastf36 $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_tf.o $(DROPTFF_O) scaleswtf.o last_tat.o tatstats_ff.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o mrandom.o url_subs.o $(LIB_M) $(LIB_DB) $(THR_LIBS) tfasts36 : $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o c_dispn.o htime.o apam.o doinit.o init_tfs.o scaleswts.o last_tat.o tatstats_fs.o karlin.o $(DROPTFS_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o mrandom.o url_subs.o $(CC) $(HFLAGS) -o $(BIN)/tfasts36 $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_tfs.o $(DROPTFS_O) scaleswts.o last_tat.o tatstats_fs.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o mrandom.o url_subs.o $(LIB_M) $(LIB_DB) $(THR_LIBS) tfastm36 : $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_tfm.o scaleswts.o tatstats_fm.o last_tat.o karlin.o $(DROPTFM_O) $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o mrandom.o url_subs.o $(CC) $(HFLAGS) -o $(BIN)/tfastm36 $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_S).o htime.o apam.o doinit.o init_tfm.o $(DROPTFM_O) scaleswts.o tatstats_fm.o last_tat.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o mrandom.o url_subs.o $(LIB_M) $(LIB_DB) $(THR_LIBS) tfastx36 : $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_tfx.o scale_se.o karlin.o drop_tfx.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o url_subs.o mrandom.o $(CC) $(HFLAGS) -o $(BIN)/tfastx36 $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_tfx.o drop_tfx.o scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o url_subs.o mrandom.o $(LIB_M) $(LIB_DB) $(THR_LIBS) tfasty36 : $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_tfy.o scale_se.o karlin.o drop_tfz.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o url_subs.o mrandom.o $(CC) $(HFLAGS) -o $(BIN)/tfasty36 $(COMP_THRO) $(WORK_THRO) $(THR_SUBS).o $(COMPACC_TO) $(SHOWBESTO) re_getlib.o $(SHOWALIGN_T).o htime.o apam.o doinit.o init_tfy.o drop_tfz.o scale_se.o karlin.o $(LGETLIB) c_dispn.o $(NCBL_LIB) lib_sel.o faatran.o url_subs.o mrandom.o $(LIB_M) $(LIB_DB) $(THR_LIBS) comp_mlib9.o : comp_lib9.c mw.h structs.h defs.h param.h $(CC) $(THR_CC) $(CFLAGS) -DCOMP_MLIB -c comp_lib9.c -o comp_mlib9.o comp_mthr9.o : comp_lib9.c mw.h structs.h defs.h param.h thr_bufs2.h thr_buf_structs.h $(CC) $(THR_CC) $(CFLAGS) -DCOMP_THR -DCOMP_MLIB -c comp_lib9.c -o comp_mthr9.o work_thr2.o : work_thr2.c mw.h structs.h defs.h param.h thr_bufs2.h thr_buf_structs.h $(CC) $(THR_CC) $(CFLAGS) -c work_thr2.c print_pssm : print_pssm.c getseq.c karlin.c apam.c pssm_asn_subs.c $(CC) $(HFLAGS) -o print_pssm $(CFLAGS) print_pssm.c getseq.c karlin.c apam.c pssm_asn_subs.c $(LIB_M) $(LIB_DB) map_db : map_db.c uascii.h ncbl2_head.h $(CC) $(LDFLAGS) $(CPPFLAGS) $(CFLAGS) $(HFLAGS) -o $(BIN)/map_db map_db.c list_db : list_db.c $(CC) $(LDFLAGS) $(CPPFLAGS) $(CFLAGS) $(HFLAGS) -o $(BIN)/list_db list_db.c lav2ps : lav2plt.o lavplt_ps.o $(CC) $(LDFLAGS) $(CPPFLAGS) -DUNIX $(HFLAGS) -o $(BIN)/lav2ps lav2plt.o lavplt_ps.o -lm lav2svg : lav2plt.o lavplt_svg.o $(CC) $(LDFLAGS) $(CPPFLAGS) -DUNIX $(HFLAGS) -o $(BIN)/lav2svg lav2plt.o lavplt_svg.o -lm fasta36-36.3.8i_14-Nov-2020/make/Makefile.sgi000066400000000000000000000024071433453312700200260ustar00rootroot00000000000000# # makefile for fasta3, fasta3_t. Use makefile.pvm for pvcompxx. # # for more information on FASTA on SGI's, see: # # http://www.sgi.com/chembio/resources/fasta/index.html # # use -DBIG_LIB64 to generate 64-bit offsets in map_db .xin files. This # only works on SGI's with the -64 option. CC= cc -w -64 -mips4 -O2 -TENV:X=3 -DSGI_BUG -Wl,-multigot -DIRIX #CC= cc -64 -mips4 -g -DSGI_BUG -DDEBUG -DIRIX HFLAGS= -64 -mips4 LIB_M= -lm # For R2000/R3000 MIPS Processors, use -mips1 # #CC= cc -mips1 -O2 #HFLAGS= -mips1 # # For R4000 MIPS Processors, use -mips2: # #CC = cc -mips2 -O2 #HFLAGS= -mips2 # CFLAGS= -DSHOWSIM -DUNIX -DTIMES -DHZ=100 -DBIGMEM -DSFCHAR="':'" -DMAX_WORKERS=4 -DTHR_EXIT=pthread_exit -DFASTA_HOST='"crick.med.virginia.edu/fasta/cgi"' -DIS_BIG_ENDIAN -DUSE_MMAP -DBIG_LIB64 -DHAS_INTTYPES -DSAMP_STATS -DPGM_DOC -DBIG_LIB64 THR_SUBS = pthr_subs2 THR_LIBS = -lpthread THR_CC = BIN = ../bin XDIR = /seqprg/slib/bin # set up files for SSE2/Altivec acceleration # include ../make/Makefile.sse_alt # no acceleration # DROPGSW_O = $(DROPGSW_NA_O) DROPLAL_O = $(DROPLAL_NA_O) DROPGNW_O = $(DROPGNW_NA_O) DROPLNW_O = $(DROPLNW_NA_O) # renamed (fasta34) programs include ../make/Makefile36m.common # conventional (fasta3) names # include ../make/Makefile.common fasta36-36.3.8i_14-Nov-2020/make/Makefile.sse_alt000066400000000000000000000021401433453312700206700ustar00rootroot00000000000000# # $Name: $ - $ Id: $ # # sets of files for no (DROPGSW_NA_O), SSE2, or Altivec Smith-Waterman acceleration # DROPGSW_NA_O = init_sw.o dropgsw2.o lwm_align.o calcons_sw.o DROPGSW_SSE_O = init_sw_sse.o dropgsw2_sse.o smith_waterman_sse2.o lwm_align.o calcons_sw.o DROPGSW_ALT_O = init_sw_alt.o dropgsw2_alt.o smith_waterman_altivec.o lwm_align.o calcons_sw.o P_DROPNSW_NA_O = dropnsw.o lwm_align.o calcons_sw.o P_DROPGSW_NA_O = dropgsw2.o lwm_align.o calcons_sw.o P_DROPGSW_SSE_O = dropgsw2_sse.o smith_waterman_sse2.o lwm_align.o calcons_sw.o P_DROPGSW_ALT_O = dropgsw2_alt.o smith_waterman_altivec.o lwm_align.o calcons_sw.o DROPLAL_NA_O = droplal2.o lsim4.o calcons_la.o DROPLAL_SSE_O = droplal2_sse.o smith_waterman_sse2.o lsim4.o calcons_la.o DROPLAL_ALT_O = droplal2_alt.o smith_waterman_altivec.o lsim4.o calcons_la.o DROPGNW_NA_O = init_gnw.o dropgnw.o gwm_align.o calcons_sw.o DROPGNW_SSE_O = init_gnw_sse.o dropgnw_sse.o global_sse2.o gwm_align.o calcons_sw.o DROPLNW_NA_O = init_lnw.o droplnw.o gwm_align.o calcons_sw.o DROPLNW_SSE_O = init_lnw_sse.o droplnw_sse.o glocal_sse2.o gwm_align.o calcons_sw.o fasta36-36.3.8i_14-Nov-2020/make/Makefile.sun000066400000000000000000000024251433453312700200510ustar00rootroot00000000000000# # makefile for fasta3, fasta3_t. Use makefile.pvm for pvcompxx. SHELL=/usr/bin/bash #CC= cc -g -xarch=v8plusa # switches for 64-bit addressing CC= cc -fast -xO4 -xarch=v9 #CC= cc -g -xarch=v9 # for SUNMP, use -DTHR_EXIT=thr_exit # HZ=100 for Solaris x86 # -DIS_LITTLE_ENDIAN for Solaris x86 CFLAGS= -DSHOWSIM -DUNIX -DTIMES -DHZ=100 -DBIGMEM -DSFCHAR="':'" -DMAX_WORKERS=2 -DTHR_EXIT=thr_exit -DFASTA_setscope -DUSE_MMAP -DBIG_LIB64 -DHAS_INTTYPES -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -DUSE_FSEEKO -DM10_CONS -DSAMP_STATS -DPGM_DOC HFLAGS= # use -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 # for files > 2 GB #for Sun pthreads (preferred, pthreads used on all other platforms) THR_SUBS = pthr_subs2 THR_LIBS = -lpthread THR_CC = #for Sun threads (no longer necessary as Sun supports pthreads) #THR_SUBS = uthr_subs2 #THR_LIBS = -lthread #THR_CC = LIB_M= -lmopt BIN = ../bin XDIR = /seqprg/bin # set up files for SSE2/Altivec acceleration # include ../make/Makefile.sse_alt # no acceleration # DROPGSW_O = $(DROPGSW_NA_O) DROPLAL_O = $(DROPLAL_NA_O) DROPGNW_O = $(DROPGNW_NA_O) DROPLNW_O = $(DROPLNW_NA_O) # renamed (fasta34) programs include ../make/Makefile36m.common # conventional (fasta3) names # include ../make/Makefile.common fasta36-36.3.8i_14-Nov-2020/make/Makefile.sun_x86000066400000000000000000000025111433453312700205520ustar00rootroot00000000000000# # makefile for fasta3, fasta3_t. Use makefile.pvm for pvcompxx. SHELL=/usr/bin/bash # used for make install # switches for 64-bit addressing - AMD64 CC= cc -g -fast -m64 # debugging options #CC= cc -g -DDEBUG -xarch=amd64 # for SUNMP, use -DTHR_EXIT=thr_exit # HZ=100 for Solaris x86 # Solaris X86 is little endian - be certain IS_BIG_ENDIAN is not defined CFLAGS= -DSHOWSIM -DUNIX -DTIMES -DHZ=100 -DBIGMEM -DSFCHAR="':'" -DMAX_WORKERS=2 -DTHR_EXIT=thr_exit -DFASTA_setscope -DUSE_MMAP -DBIG_LIB64 -DHAS_INTTYPES -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -DUSE_FSEEKO -DM10_CONS -DSAMP_STATS -DPGM_DOC HFLAGS= # use -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 # for files > 2 GB #for Sun pthreads (preferred, pthreads used on all other platforms) THR_SUBS = pthr_subs2 THR_LIBS = -lpthread THR_CC = #for Sun threads (no longer necessary as Sun supports pthreads) #THR_SUBS = uthr_subs2 #THR_LIBS = -lthread #THR_CC = LIB_M= -lmopt BIN = ../bin XDIR = /seqprg/bin # set up files for SSE2/Altivec acceleration # include ../make/Makefile.sse_alt # DROPGSW_O = $(DROPGSW_SSE_O) DROPLAL_O = $(DROPLAL_SSE_O) DROPGNW_O = $(DROPGNW_SSE_O) DROPLNW_O = $(DROPLNW_SSE_O) # renamed (fasta35) programs include ../make/Makefile36m.common # conventional (fasta3) names # include ../make/Makefile.common fasta36-36.3.8i_14-Nov-2020/make/Makefile35.common000066400000000000000000000022331433453312700207010ustar00rootroot00000000000000# # $Name: $ - $Id: Makefile35.common 344 2010-06-29 18:20:22Z wrp $ # # commands common to all architectures # if your architecture does not support "include", append at the end. # # use for multiple query sequences COMP_LIBO=comp_mlib2.o COMP_THRO=comp_mthr2.o WORK_THRO=work_thr2.o GETSEQO = # standard nxgetaa, no memory mapping for 0 - 6 LGETLIB=getseq.o lgetlib.o NGETLIB=nmgetlib # memory mapping for 0FASTA, 5PIRVMS, 6GCGBIN LGETLIB=getseq.o lgetlib.o lgetaa_m.o NGETLIB=nmgetlib NRAND=nrandom # use ncbl_lib.c for BLAST1.4 support instead of ncbl2_mlib.c #NCBL_LIB=ncbl_lib.o # this option should support both formats (BLAST1.4 not currently supported): #NCBL_LIB=ncbl_lib.o ncbl2_mlib.o # normally use ncbl2_mlib.c #NCBL_LIB=ncbl2_mlib.o #LIB_M= -lm # this option supports NCBI BLAST2 and mySQL # it requires "-I/usr/local/include/mysql -DMYSQL_DB" in CFLAGS # and "-L/usr/local/lib/mysql -lmysqlclient -lz" in LIB_M # some systems may also require a LD_LIBRARY_PATH change #LIB_M= -L/usr/local/lib/mysql -lmysqlclient -lz -lm LIB_M= -lm #NCBL_LIB=ncbl2_mlib.o mysql_lib.o NCBL_LIB=ncbl2_mlib.o include ../make/Makefile.pcom include ../make/Makefile.fcom fasta36-36.3.8i_14-Nov-2020/make/Makefile35.common_sql000066400000000000000000000025121433453312700215600ustar00rootroot00000000000000# # $Name: $ - $Id: Makefile35.common_sql 344 2010-06-29 18:20:22Z wrp $ # # commands common to all architectures # if your architecture does not support "include", append at the end. # # use for "normal" fasta34(_t) programs - only one query COMP_LIBO=comp_lib2.o COMP_THRO=comp_thr2.o WORK_THRO=work_thr2.o GETSEQO = getseq.o # use for multiple query sequences, requires "-n" for DNA fasta, does not # work with prss34 (yet) #COMP_LIB=comp_mlib.o #COMP_THRO=comp_mthr.o # # standard nxgetaa, no memory mapping for 0 - 6 LGETLIB=getseq.o lgetlib.o lgetaa_m.o NGETLIB=nmgetlib # memory mapping for 0FASTA, 5PIRVMS, 6GCGBIN # LGETLIB=getseq.o lgetlib.o lgetaa_m.o # NGETLIB=nmgetlib NRAND=nrandom # use ncbl_lib.c for BLAST1.4 support instead of ncbl2_mlib.c #NCBL_LIB=ncbl_lib.o # this option should support both formats (BLAST1.4 not currently supported): #NCBL_LIB=ncbl_lib.o ncbl2_mlib.o # normally use ncbl2_mlib.c #NCBL_LIB=ncbl2_mlib.o #LIB_M= -lm # this option supports NCBI BLAST2 and mySQL # it requires "-I/usr/include/mysql -DMYSQL_DB" in CFLAGS # and "-L/usr/lib/mysql -lmysqlclient -lz" in LIB_M # some systems may also require a LD_LIBRARY_PATH change LIB_M= -L/usr/lib/mysql -lmysqlclient -lz -lm #LIB_M= -lm NCBL_LIB=ncbl2_mlib.o mysql_lib.o #NCBL_LIB=ncbl2_mlib.o include ../make/Makefile.pcom include ../make/Makefile.fcom fasta36-36.3.8i_14-Nov-2020/make/Makefile35.nmk_com000077500000000000000000000012251433453312700210370ustar00rootroot00000000000000# # $Name: $ - $Id: Makefile35.nmk_com 344 2010-06-29 18:20:22Z wrp $ # # commands common to all architectures # if your architecture does not support "include", append at the end. # # use for multiple query sequences COMP_LIBO=comp_mlib2.obj COMP_THRO=comp_mthr2.obj WORK_THRO=work_thr2.obj GETSEQO = # standard nxgetaa, no memory mapping for 0 - 6 LGETLIB=getseq.obj lgetlib.obj NGETLIB=nmgetlib # memory mapping for 0FASTA, 5PIRVMS, 6GCGBIN # no memory mapping for Win32 #LGETLIB= lgetlib.obj lgetaa_m.obj NRAND=nrand # normally use ncbl2_mlib.c NCBL_LIB=ncbl2_mlib.obj #LIB_M= -lm include ../make/Makefile.nm_pcom include ../make/Makefile.nm_fcom fasta36-36.3.8i_14-Nov-2020/make/Makefile35m.common_mysql000066400000000000000000000024241433453312700223050ustar00rootroot00000000000000# # $Name: $ - $Id: Makefile35m.common_mysql 344 2010-06-29 18:20:22Z wrp $ # # commands common to all architectures # if your architecture does not support "include", append at the end. # # use for multiple query sequences # work with prss34 (yet) COMP_LIBO=comp_mlib2.o COMP_THRO=comp_mthr2.o WORK_THRO=work_thr2.o GETSEQO = # standard nxgetaa, no memory mapping for 0 - 6 #LGETLIB=getseq.o lgetlib.o #NGETLIB=nmgetlib # memory mapping for 0FASTA, 5PIRVMS, 6GCGBIN LGETLIB= $(GETSEQO) lgetlib.o lgetaa_m.o NGETLIB=nmgetlib NRAND=nrandom # use ncbl_lib.c for BLAST1.4 support instead of ncbl2_mlib.c #NCBL_LIB=ncbl_lib.o # this option should support both formats (BLAST1.4 not currently supported): #NCBL_LIB=ncbl_lib.o ncbl2_mlib.o # normally use ncbl2_mlib.c #NCBL_LIB=ncbl2_mlib.o #LIB_M= -lm # this option supports NCBI BLAST2 and mySQL # it requires "-I/usr/local/include/mysql -DMYSQL_DB" in CFLAGS # and "-L/usr/local/lib/mysql -lmysqlclient -lz" in LIB_M # some systems may also require a LD_LIBRARY_PATH change LIB_M= -L/usr/lib64/mysql -lmysqlclient -lz -lm #LIB_M= -L/usr/lib/pgsql/ -lpq -lm -lcrypto -lssl # LIB_M= -lm NCBL_LIB=ncbl2_mlib.o mysql_lib.o #NCBL_LIB=ncbl2_mlib.o pgsql_lib.o # NCBL_LIB=ncbl2_mlib.o include ../make/Makefile.pcom include ../make/Makefile.fcom fasta36-36.3.8i_14-Nov-2020/make/Makefile35m.common_pgsql000066400000000000000000000024361433453312700222710ustar00rootroot00000000000000# # $Name: $ - $Id: Makefile35m.common_pgsql 344 2010-06-29 18:20:22Z wrp $ # # commands common to all architectures # if your architecture does not support "include", append at the end. # # use for multiple query sequences # work with prss34 (yet) COMP_LIBO=comp_mlib2.o COMP_THRO=comp_mthr2.o WORK_THRO=work_thr2.o GETSEQO = # standard nxgetaa, no memory mapping for 0 - 6 #LGETLIB=getseq.o lgetlib.o #NGETLIB=nmgetlib # memory mapping for 0FASTA, 5PIRVMS, 6GCGBIN LGETLIB= $(GETSEQO) lgetlib.o lgetaa_m.o NGETLIB=nmgetlib NRAND=nrandom # use ncbl_lib.c for BLAST1.4 support instead of ncbl2_mlib.c #NCBL_LIB=ncbl_lib.o # this option should support both formats (BLAST1.4 not currently supported): #NCBL_LIB=ncbl_lib.o ncbl2_mlib.o # normally use ncbl2_mlib.c #NCBL_LIB=ncbl2_mlib.o #LIB_M= -lm # this option supports NCBI BLAST2 and mySQL # it requires "-I/usr/local/include/mysql -DMYSQL_DB" in CFLAGS # and "-L/usr/local/lib/mysql -lmysqlclient -lz" in LIB_M # some systems may also require a LD_LIBRARY_PATH change # LIB_M= -L/usr/local/lib/mysql -lmysqlclient -lz -lm LIB_M= -L/usr/local/pgsql/lib -lpq -lm -lcrypto -lssl # LIB_M= -lm #NCBL_LIB=ncbl2_mlib.o mysql_lib.o NCBL_LIB=ncbl2_mlib.o pgsql_lib.o # NCBL_LIB=ncbl2_mlib.o include ../make/Makefile.pcom include ../make/Makefile.fcom fasta36-36.3.8i_14-Nov-2020/make/Makefile35m.common_sql000066400000000000000000000024341433453312700217400ustar00rootroot00000000000000# # $Name: $ - $Id: Makefile35m.common_sql 344 2010-06-29 18:20:22Z wrp $ # # commands common to all architectures # if your architecture does not support "include", append at the end. # # use for multiple query sequences # work with prss34 (yet) COMP_LIBO=comp_mlib2.o COMP_THRO=comp_mthr2.o WORK_THRO=work_thr2.o GETSEQO = # standard nxgetaa, no memory mapping for 0 - 6 #LGETLIB=getseq.o lgetlib.o #NGETLIB=nmgetlib # memory mapping for 0FASTA, 5PIRVMS, 6GCGBIN LGETLIB= $(GETSEQO) lgetlib.o lgetaa_m.o NGETLIB=nmgetlib NRAND=nrandom # use ncbl_lib.c for BLAST1.4 support instead of ncbl2_mlib.c #NCBL_LIB=ncbl_lib.o # this option should support both formats (BLAST1.4 not currently supported): #NCBL_LIB=ncbl_lib.o ncbl2_mlib.o # normally use ncbl2_mlib.c #NCBL_LIB=ncbl2_mlib.o #LIB_M= -lm # this option supports NCBI BLAST2 and mySQL # it requires "-I/usr/local/include/mysql -DMYSQL_DB" in CFLAGS # and "-L/usr/lib/mysql -lmysqlclient -lz" in LIB_M # some systems may also require a LD_LIBRARY_PATH change # LIB_M= -L/usr/lib/mysql -lmysqlclient -lz -lm LIB_M= -L/usr/lib/mysql -lmysqlclient -lz -L/usr/local/pgsql/lib -lpq -lm -lcrypto -lssl # LIB_M= -lm NCBL_LIB=ncbl2_mlib.o mysql_lib.o pgsql_lib.o # NCBL_LIB=ncbl2_mlib.o include ../make/Makefile.pcom include ../make/Makefile.fcom fasta36-36.3.8i_14-Nov-2020/make/Makefile36.nmk_com000066400000000000000000000012301433453312700210310ustar00rootroot00000000000000# # $Name: $ - $Id: Makefile36.nmk_com 1203 2013-07-20 12:55:48Z wrp $ # # commands common to all architectures # if your architecture does not support "include", append at the end. # # use for multiple query sequences COMP_LIBO=comp_mlib9.obj COMP_THRO=comp_mthr9.obj WORK_THRO=work_thr2.obj GETSEQO = # standard nxgetaa, no memory mapping for 0 - 6 LGETLIB=getseq.obj lgetlib.obj NGETLIB=nmgetlib # memory mapping for 0FASTA, 5PIRVMS, 6GCGBIN # no memory mapping for Win32 #LGETLIB= lgetlib.obj lgetaa_m.obj NRAND=mrandom # normally use ncbl2_mlib.c NCBL_LIB=ncbl2_mlib.obj #LIB_M= -lm include ../make/Makefile.nm_pcom include ../make/Makefile.nm_fcom fasta36-36.3.8i_14-Nov-2020/make/Makefile36m.common000066400000000000000000000024721433453312700210640ustar00rootroot00000000000000# # $Name: $ - $Id: Makefile36m.common 1250 2014-01-24 21:33:39Z wrp $ # # commands common to all architectures # if your architecture does not support "include", append at the end. # COMP_LIBO=comp_mlib9.o # reads database into memory for multi-query without delay COMP_THRO=comp_mthr9.o # threaded version WORK_THRO=work_thr2.o GETSEQO = # standard nxgetaa, no memory mapping for 0 - 6 #LGETLIB=getseq.o lgetlib.o #NGETLIB=nmgetlib # memory mapping for 0FASTA, 5PIRVMS, 6GCGBIN LGETLIB= $(GETSEQO) lgetlib.o lgetaa_m.o NGETLIB=nmgetlib # use ncbl_lib.c for BLAST1.4 support instead of ncbl2_mlib.c #NCBL_LIB=ncbl_lib.o # this option should support both formats (BLAST1.4 not currently supported): #NCBL_LIB=ncbl_lib.o ncbl2_mlib.o # normally use ncbl2_mlib.c #NCBL_LIB=ncbl2_mlib.o #LIB_M= -lm # this option supports NCBI BLAST2 and mySQL # it requires "-I/usr/include/mysql -DMYSQL_DB" in CFLAGS # and "-L/usr/lib64/mysql -lmysqlclient -lz" in LIB_M # some systems may also require a LD_LIBRARY_PATH change LIB_M= -lm #LIB_M= -L/usr/lib64/mysql -lmysqlclient -lm # -lz NCBL_LIB=ncbl2_mlib.o #NCBL_LIB=ncbl2_mlib.o mysql_lib.o # threaded as _t, serial # include ../make/Makefile.pcom # threaded without _t include ../make/Makefile.pcom_t # serial only # include ../make/Makefile.pcom_s include ../make/Makefile.fcom fasta36-36.3.8i_14-Nov-2020/make/Makefile36m.common_mariadb000066400000000000000000000025501433453312700225400ustar00rootroot00000000000000# # $Name: $ - $Id: $ # # commands common to all architectures # if your architecture does not support "include", append at the end. # COMP_LIBO=comp_mlib9.o # reads database into memory for multi-query without delay COMP_THRO=comp_mthr9.o # threaded version WORK_THRO=work_thr2.o GETSEQO = # standard nxgetaa, no memory mapping for 0 - 6 #LGETLIB=getseq.o lgetlib.o #NGETLIB=nmgetlib # memory mapping for 0FASTA, 5PIRVMS, 6GCGBIN LGETLIB= $(GETSEQO) lgetlib.o lgetaa_m.o NGETLIB=nmgetlib # use ncbl_lib.c for BLAST1.4 support instead of ncbl2_mlib.c #NCBL_LIB=ncbl_lib.o # this option should support both formats (BLAST1.4 not currently supported): #NCBL_LIB=ncbl_lib.o ncbl2_mlib.o # normally use ncbl2_mlib.c #NCBL_LIB=ncbl2_mlib.o #LIB_M= -lm # this option supports NCBI BLAST2 and mySQL # it requires "-I/usr/include/mysql -DMYSQL_DB" in CFLAGS # and "-L/usr/lib64/mysql -lmysqlclient -lz" in LIB_M # some systems may also require a LD_LIBRARY_PATH change #LIB_M= -lm #LIB_M= -L/usr/lib64/mysql -lmysqlclient -lm # -lz LIB_M= -L/usr/lib/x86_64-linux-gnu -lmariadbclient -lz -lm #NCBL_LIB=ncbl2_mlib.o #NCBL_LIB=ncbl2_mlib.o mysql_lib.o NCBL_LIB=ncbl2_mlib.o mysql_lib.o # threaded as _t, serial # include ../make/Makefile.pcom # threaded without _t include ../make/Makefile.pcom_t # serial only # include ../make/Makefile.pcom_s include ../make/Makefile.fcom fasta36-36.3.8i_14-Nov-2020/make/Makefile36m.common_pgsql000066400000000000000000000025511433453312700222700ustar00rootroot00000000000000# # $Name: $ - $Id: $ # # commands common to all architectures # if your architecture does not support "include", append at the end. # COMP_LIBO=comp_mlib9.o # reads database into memory for multi-query without delay COMP_THRO=comp_mthr9.o # threaded version WORK_THRO=work_thr2.o GETSEQO = # standard nxgetaa, no memory mapping for 0 - 6 #LGETLIB=getseq.o lgetlib.o #NGETLIB=nmgetlib # memory mapping for 0FASTA, 5PIRVMS, 6GCGBIN LGETLIB= $(GETSEQO) lgetlib.o lgetaa_m.o NGETLIB=nmgetlib # use ncbl_lib.c for BLAST1.4 support instead of ncbl2_mlib.c #NCBL_LIB=ncbl_lib.o # this option should support both formats (BLAST1.4 not currently supported): #NCBL_LIB=ncbl_lib.o ncbl2_mlib.o # normally use ncbl2_mlib.c #NCBL_LIB=ncbl2_mlib.o #LIB_M= -lm # this option supports NCBI BLAST2 and mySQL # it requires "-I/usr/include/mysql -DMYSQL_DB" in CFLAGS # and "-L/usr/lib64/mysql -lmysqlclient -lz" in LIB_M # some systems may also require a LD_LIBRARY_PATH change #LIB_M= -lm #LIB_M= -L/usr/lib64/mysql -lmysqlclient -lm # -lz LIB_M= -L/usr/lib/postgresql/11/lib -lpq -lm -lcrypto -lssl #NCBL_LIB=ncbl2_mlib.o #NCBL_LIB=ncbl2_mlib.o mysql_lib.o NCBL_LIB=ncbl2_mlib.o pgsql_lib.o # threaded as _t, serial # include ../make/Makefile.pcom # threaded without _t include ../make/Makefile.pcom_t # serial only # include ../make/Makefile.pcom_s include ../make/Makefile.fcom fasta36-36.3.8i_14-Nov-2020/make/Makefile36mpi.common000066400000000000000000000022421433453312700214100ustar00rootroot00000000000000# # $Name: $ - $Id: Makefile36mpi.common 849 2011-10-21 20:09:55Z wrp $ # # commands common to all architectures # if your architecture does not support "include", append at the end. # # use for multiple query sequences COMP_THRO=comp_mpi9.o WORK_THR_O=work_mpi2.o WORK_THRX_O=work_mpi2x.o GETSEQO = # standard nxgetaa, no memory mapping for 0 - 6 #LGETLIB=getseq.o lgetlib.o #NGETLIB=nmgetlib # memory mapping for 0FASTA, 5PIRVMS, 6GCGBIN LGETLIB= $(GETSEQO) lgetlib.o lgetaa_m.o NGETLIB=nmgetlib # use ncbl_lib.c for BLAST1.4 support instead of ncbl2_mlib.c #NCBL_LIB=ncbl_lib.o # this option should support both formats (BLAST1.4 not currently supported): #NCBL_LIB=ncbl_lib.o ncbl2_mlib.o # normally use ncbl2_mlib.c #NCBL_LIB=ncbl2_mlib.o #LIB_M= -lm -lz # this option supports NCBI BLAST2 and mySQL # it requires "-I/usr/local/include/mysql -DMYSQL_DB" in CFLAGS # and "-L/usr/local/lib/mysql -lmysqlclient -lz" in LIB_M # some systems may also require a LD_LIBRARY_PATH change #LIB_M= -L/usr/local/lib/mysql -lmysqlclient -lz -lm #NCBL_LIB=ncbl2_mlib.o mysql_lib.o NCBL_LIB=ncbl2_mlib.o LIB_M = -lm -lz include ../make/Makefile.mp_com2 include ../make/Makefile.fcom fasta36-36.3.8i_14-Nov-2020/make/Makefile36t.common000066400000000000000000000022221433453312700210640ustar00rootroot00000000000000# # $Name: $ - $Id: Makefile36t.common 344 2010-06-29 18:20:22Z wrp $ # # commands common to all architectures # if your architecture does not support "include", append at the end. # # use for multiple query sequences COMP_LIBO=comp_mlib4.o COMP_THRO=comp_mthr4.o WORK_THRO=work_thr2.o GETSEQO = # standard nxgetaa, no memory mapping for 0 - 6 #LGETLIB=getseq.o lgetlib.o #NGETLIB=nmgetlib # memory mapping for 0FASTA, 5PIRVMS, 6GCGBIN LGETLIB= $(GETSEQO) lgetlib.o lgetaa_m.o NGETLIB=nmgetlib # use ncbl_lib.c for BLAST1.4 support instead of ncbl2_mlib.c #NCBL_LIB=ncbl_lib.o # this option should support both formats (BLAST1.4 not currently supported): #NCBL_LIB=ncbl_lib.o ncbl2_mlib.o # normally use ncbl2_mlib.c #NCBL_LIB=ncbl2_mlib.o #LIB_M= -lm # this option supports NCBI BLAST2 and mySQL # it requires "-I/usr/local/include/mysql -DMYSQL_DB" in CFLAGS # and "-L/usr/local/lib/mysql -lmysqlclient -lz" in LIB_M # some systems may also require a LD_LIBRARY_PATH change #LIB_M= -L/usr/local/lib/mysql -lmysqlclient -lz -lm #NCBL_LIB=ncbl2_mlib.o mysql_lib.o NCBL_LIB=ncbl2_mlib.o LIB_M= -lm include ../make/Makefile.pcom include ../make/Makefile.fcom fasta36-36.3.8i_14-Nov-2020/make/README000066400000000000000000000023241433453312700164630ustar00rootroot00000000000000 22-Jan-2014 fasta36/Make ================ Makefiles for different Unix/Linux/MacOS configurations **************** These make files are designed to be run from the ../src directory, e.g. cd ~/fasta36/src make -f ../make/Makfile.linux64_sse2 all **************** While several different architectures are specified here, the files that are used the most are: Makefile.linux64_sse2 -- standard Linux(64-bit) Makefile -- now equivalent to Makefile.linux64 and Makefile.linux. For non-sse2 compiles, use Makefile.linux64_nosse2 Makefile.linux_icc_sse2 -- Linux (64-bit) with Intel icc compiler Makefile.os_x86_64 -- standard MacOS (64-bit) Makefile (also sse2) Makfile.nmk_ics -- Windows 32-bit with Intel icc compiler ================ Most of the other Makefiles have not been tested for months or years. ================================================================ The major Makefiles above include other makefiles, including Makefile36m.common, Makefile.pcom_t, Makefile.fcom to compile and link the appropriate programs. The Windows Makefile.nmk_icl uses Makefile.nm_fcom and Makefile.nm_pcom The windows environment requires Microsoft nmake. ================================================================ fasta36-36.3.8i_14-Nov-2020/make/make_osx_univ.sh000077500000000000000000000015411433453312700210110ustar00rootroot00000000000000#!/bin/csh ## should start from fasta_dir/src set bin = ../bin if (! -d ../bin ) mkdir $bin # if (! -d ../bin/ppc) mkdir $bin/ppc # if (! -d ../bin/i386) mkdir $bin/i386 if (! -d ../bin/x86_64) mkdir $bin/x86_64 if (! -d ../bin/arm64) mkdir $bin/arm64 ## cd ../src # rm *.o # make -f ../make/Makefile.os_x_ppc all # make -f ../make/Makefile.os_x_ppc uinstall # rm *.o # make -f ../make/Makefile.os_x86 all # make -f ../make/Makefile.os_x86 uinstall rm *.o make -f ../make/Makefile.os_x86_64 all make -f ../make/Makefile.os_x86_64 uinstall rm *.o make -f ../make/Makefile.os_x_arm64 all make -f ../make/Makefile.os_x_arm64 uinstall rm *.o pushd ../bin foreach n ( x86_64/* arm64/*) set f=$n:t #lipo -create ppc/$f i386/$f x86_64/$f -output $f lipo -create x86_64/$f arm64/$f -output $f echo "Universal $f built" end # rm -rf x86_64 arm64 popd echo "Done!" fasta36-36.3.8i_14-Nov-2020/misc/000077500000000000000000000000001433453312700156205ustar00rootroot00000000000000fasta36-36.3.8i_14-Nov-2020/misc/README000066400000000000000000000006501433453312700165010ustar00rootroot00000000000000 22-Jan-2014 fasta36/misc Perl scripts for simple tasks parse_m9.pl -- parse -m 9 output to produce tab-delimited files with tab-delimited: query_acc, query_len, lib_acc, lib_len, score, bits, evalue, f_id, f_sim, alen, and start/stop coordinates res2R.pl -- convert fasta36 -R raw.results files into something 'R' can digest shuffle_embed.pl -- take a sequence and embed it into a shuffled version of itself fasta36-36.3.8i_14-Nov-2020/misc/parse_m9.pl000077500000000000000000000065671433453312700177150ustar00rootroot00000000000000#!/usr/bin/perl -w # # parse_m9.pl -- a simple script to parse fasta/fastx/ssearch -m 9 output and produce a simple set of results: # >query_idlen # hit_acclenscorebitsexpectf_idf_sim... # use strict; use Getopt::Long; use vars qw($e_cutoff $p_cutoff $head); die "usage -- parse_m9.pl [--head] [--expect e_cut] [--percid p_cut] m9_out.file\n" unless @ARGV; $e_cutoff = 10.0; $p_cutoff = 0.0; $head = 0; GetOptions("expect=s" => \$e_cutoff, "percid=s" => \$p_cutoff, "head" => \$head, ); my @hit_fields = (); my @m9_fields = (); my $first_hit = 1; my $res_handle; for my $s_res_file ( @ARGV ) { next unless open($res_handle, $s_res_file); while (my ($q_num, $query_descr, $query_len, $best_yes) = skip_to_results($res_handle)) { last unless $query_descr; unless ($best_yes) { <$res_handle>; # skip >>><<< # uncomment for queries with no hits # print ">$query_descr\t$query_len\n"; next; } print ">$query_descr\t$query_len\n" unless $head; while (my $line = <$res_handle>) { # for each result last if $line =~ m/>>><< $e_cutoff && $percid < $p_cutoff); my $frame = ""; my $l_len = $fields[-4]; if ($fields[-4] =~ m/\[f|r\]/) { $l_len = $fields[-5]; $frame = $fields[-4]; if ($head) {unshift @hit_fields, "[fr]";} } if ($head && $first_hit) { unshift @hit_fields, qw(acc llen); print "#" . join("\t",(@hit_fields, @m9_fields)) . "\n"; print ">$query_descr\t$query_len\n"; $first_hit = 0; $head = 0; } $l_len =~ s/\(//; $l_len =~ s/\)//; my ($l_db,$l_acc) = parse_descr($fields[0]); my @out_fields = ($l_acc, $l_len); if ($l_db) { unshift @out_fields, $l_db;} if ($frame) { push @out_fields, $frame;} print join("\t",(@out_fields, @fields[-3,-2,-1], @afields)) . "\n"; } } } sub skip_to_results { my ($res_handle) = @_; my ($q_num, $query_desc, $query_len, $best_yes); while (my $line = <$res_handle>) { if ($line =~ m/^\s*(\d+)>>>(\S+)\s/) { ($q_num,$query_desc) = ($1,$2); ($query_len) = ($line =~ m/\s(\d+)\s\w+$/); goto have_query; } elsif ($line =~ m/>>>\/\/\//) {goto done;} } warn "EOF - no query\n"; done: return ""; have_query: while (my $line = <$res_handle>) { $best_yes = 0; if ($line =~ m/^The best scores are:/) { my ($left, $right) = split(/\t/,$line); if ($head) { my @afields = split(/\s+/,$left); @m9_fields = split(/\s+/,$right); @hit_fields = @afields[-3,-2,-1]; } $best_yes = 1; last; } last if ($line =~ m/^!! No sequences/); } return ($q_num, $query_desc, $query_len, $best_yes); } sub parse_descr { my ($descr) = @_; my ($dummy, $gi, $db, $acc); if ($descr !~ m/\|/) { $db=""; $acc=$descr; } elsif ($descr =~ m/gi\|/) { # has std gi|12345|ref|acc ($dummy, $gi, $db, $acc) = split(/\|/,$descr); } elsif ($descr =~ m/\d+\|\w+/) { # has std 12345|ref|acc from libtype=10 ($gi, $db, $acc) = split(/\|/,$descr); } # remove version number $acc =~ s/\.\d+$//; return ($db, $acc); } fasta36-36.3.8i_14-Nov-2020/misc/res2R.pl000077500000000000000000000005571433453312700171640ustar00rootroot00000000000000#!/usr/bin/perl -w # convert FASTA .res file to fields for 'R' # lose the first line <>; print "len\tscore\n"; my @line; while(<>) { last if (m/\/\*\*/); @line = split(/\s+/); #fields are: # [0] ACC; [1] 0; [2] len; [3] frame; [4] comp; [5] H; [6-8] score[0-2]; # [9] rst.escore [10] segnum; [11] seglen; [12]lseek print "$line[2]\t$line[6]\n"; } fasta36-36.3.8i_14-Nov-2020/misc/shuffle_embed.pl000077500000000000000000000061511433453312700207530ustar00rootroot00000000000000#!/usr/bin/perl -w use strict; use Getopt::Long; use Pod::Usage; my ($window, $insert, $shelp, $help, $n_shuff) = (20, 1, 0, 0,1); GetOptions("window=i" => \$window, "insert=i" => \$insert, "n=i" => \$n_shuff, "h|?" => \$shelp, "help" => \$help, ); pod2usage(1) if $shelp; pod2usage(exitstatus => 0, verbose => 2) if $help; my ($seq, $header) = ("",""); while (my $line = <>) { chomp($line); if ($line =~ /^>/) { if ($seq) { process_seq($header, $seq, $window, $insert, $n_shuff);} $header = $line; $seq = ""; } else { $seq .= $line; } } if ($seq) { process_seq($header, $seq, $window, $insert, $n_shuff);} exit(0); sub process_seq { my ($header, $seq, $window, $insert, $n_shuff) = @_; # remove non amino-acids $seq =~ s/[^A-Za-z]//g; my $seq_len = length($seq); for (my $shuff_cnt = 0; $shuff_cnt < $n_shuff; $shuff_cnt++) { my $shuff_seq = win_shuffle($seq, $window); my $left_sseq = substr($shuff_seq, 0, ($seq_len+1)/2); my $right_sseq = substr($shuff_seq, ($seq_len+1)/2, $seq_len - ($seq_len+1)/2 +1); my $embed_seq = $left_sseq; if ($insert) { $embed_seq .= $seq; } $embed_seq .= $right_sseq; my ($acc, $descr) = ($header =~ m/^>(\S+)\s*(.*)$/); if ($insert) { if ($n_shuff > 1) { printf ">%s_%d e:%d-%d %s\n",$acc,$shuff_cnt,length($left_sseq)+1,length($left_sseq) + $seq_len,$descr; } else { printf ">%s e:%d-%d %s\n",$acc,length($left_sseq)+1,length($left_sseq) + $seq_len,$descr; } } else { if ($n_shuff > 1) { printf ">%s_shuff_%d %s\n",$acc,$shuff_cnt, $descr; } else { printf ">%s_shuff %s\n",$acc, $descr; } } $embed_seq =~ s/(.{60})/$1\n/g; print "$embed_seq\n"; } } my $random_seed; sub win_shuffle { my ($seq, $win) = @_; # break sequence into $win len pieces my @seq_arr = ($seq =~ m/(.{1,$win})/g); # shuffle the subsets for (my $j = 0; $j < @seq_arr; $j++) { my @subs_arr = split(//,$seq_arr[$j]); fy_shuffle(\@subs_arr); $seq_arr[$j] = join("",@subs_arr); } # now shuffle the window order fy_shuffle(\@seq_arr); # and put it back together return join("",@seq_arr); } # fy_shuffle array_ref sub fy_shuffle { my $arr = shift; die "fy_shuffle (array_ref)" unless (ref($arr) eq 'ARRAY'); return unless @$arr; my $i = scalar(@$arr)-1; while ($i > 0) { my $is = int(rand($i)); ($arr->[$i],$arr->[$is]) = ($arr->[$is],$arr->[$i]); $i--; } } __END__ =pod =head1 NAME shuffle_embed.pl =head1 SYNOPSIS shuffle_embed.pl --n=1 --insert=1 --window=20 file.seq > file.shuff_emb =head1 OPTIONS -h short help --help include description --insert=0 shuffle only, do not insert unshuffled --n=1 number of shuffles --window size of shuffle window =head1 DESCRIPTION shuffle_embed.pl takes a fasta formatted protein or DNA sequence file, reads the sequence, shuffles it, splits the shuffled sequence in the middle, and embeds the unshuffled sequence between the two halves of the shuffled sequence. With --insert 0, the sequences produced are random, no unshuffled sequence is embedded. =cut fasta36-36.3.8i_14-Nov-2020/psisearch2/000077500000000000000000000000001433453312700167305ustar00rootroot00000000000000fasta36-36.3.8i_14-Nov-2020/psisearch2/README.md000066400000000000000000000076201433453312700202140ustar00rootroot00000000000000 ## PSISEARCH2 - iterative PSSM-based similarity searching using PSIBLAST or SSEARCH36 #### September, 2016 `psisearch2_msa.pl` and `psisearch2_msa.py` (both scripts have identical arguments and functionality) perform iterative searches using PsiBLAST or ssearch36, but with additional options that dramatically improve search selectivity. In tests with challenging queries, `psisearch2_msa.pl/py` searches often reduce the number of false-positives more than ten fold, and sometimes 100-fold or more. For a simple test of `psisearch2,` try (from the `psisearch2/` directory): ``` ./psisearch2_msa.pl --query ../seq/mgstm1.aa --db ../seq/prot_test.lseg ``` This command should produce the output: ``` #./psisearch2_msa.pl --query ../seq/mgstm1.aa --db ../seq/prot_test.lseg ./psisearch2_msa.pl ssearch ../seq/mgstm1.aa ../seq/prot_test.lseg converged (2 iterations) ``` as well as four files: ``` mgstm1.aa.it1 mgstm1.aa.it1.bnd_out mgstm1.aa.it2 mgstm1.aa.it2.bnd_out ``` Real iterative searches must be run against comprehensive sequence databases, like SwissProt, RefSeq proteins, or Uniprot, e.g.: ``` ./psisearch2_msa.pl --query ../seq/mgstm1.aa --db /slib2/swissprot.lseg ``` ## More selective searches By default, `psisearch2_msa.pl` simple runs a search program (`ssearch36` by default, use `--pgm psisblast` to run `psiblast`), scans the output to produce a multiple sequence alignment, which is then used to build a `PSSM` for the next iteration. Running `psisearch2_msa.pl` for five iterations should produce results very similar to running `psiblast` for five iterations. `psisearch2_msa.pl` can perform much more selective searches using the `--query_seed` option, which is equivalent to the `--int_seed=query` and `--end_seed=query` options. The `--query_seed` option causes the `m89_btop_msa2.pl` program to insert query residues into the gapped positions of subject sequences in the sequence library used to produce the `PSSM`. This `PSSM` is slightly less sensitive than the normal model, but it is much less likely to produce alignment-overextension, so it is much less likely for alignments to extend into neighboring, non-homologous regions and contaminate the `PSSM` model. In addition to `--query_seed`, two other options: `--align`, and `--domain` can also be used to reduce alignment overextension. `--align` causes `psisearch2_msa.pl` to include only portion of a subject sequence that aligned the first time it shares significant similarity to the query PSSM; additional residues from the sequence that are aligned in later iterations are not included. This option can be used with both `--pgm ssearch` and `--pgm psiblast`. The `--domain` option uses a more sophisticated strategy for including additional residues in a PSSM. They are included only if the similarity score across the domain has a probability less than 0.001 (q-value 30). This option is only available for `--pgm ssearch`, and requires that a second option, `--annot_db`, be specified. Typically `--annot_db=pfam`. ## Customizing psisearch2 `psisearch2_msa.pl` is a script that uses other programs for similarity searching and constructing the PSSM (and for annotating domains in alignments if the `--domain` option is used). The location of these programs is defined in the `psisearch2_msa.pl` and `psisearch2_msa.py` scripts using the `$pgm_bin` and `$pgm_data` variable (perl, `pgm_bin` and `pgm_data` for python). You will probably need to modify those variables for your installation. In particular, the NCBI `datatool` program is required for producing the asn binary files required by `ssearch36`. ## `psisearch2_msa.pl/py` output In this current version, the `psisearch2_msa.pl` and `psisearch2_msa.py` programs *ONLY* produce tab-delimited BTOP output. The programs do not produce the traditional `psiblast` alignment, which includes a list of hits with E()-values, and a set of alignments. More alignment output flexibility will be available soon. fasta36-36.3.8i_14-Nov-2020/psisearch2/clustal2fasta.pl000077500000000000000000000045471433453312700220520ustar00rootroot00000000000000#!/usr/bin/env perl ################################################################ # copyright (c) 2014,2015 by William R. Pearson and The Rector & # Visitors of the University of Virginia */ ################################################################ # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under this License is distributed on an "AS # IS" BASIS, WITHOUT WRRANTIES OR CONDITIONS OF ANY KIND, either # express or implied. See the License for the specific language # governing permissions and limitations under the License. ################################################################ ################################################################ # clustal2fasta.pl ################################################################ # clustal2fasta.pl takes a standard clustal format alignment file # and produces the corresponding FASTA file. # ################################################################ use warnings; use strict; use Pod::Usage; use Getopt::Long; my ($shelp, $help, $trim) = (0, 0); GetOptions( "h|?" => \$shelp, "help" => \$help, ); pod2usage(1) if $shelp; pod2usage(exitstatus => 0, verbose => 2) if $help; unless (-f STDIN || -p STDIN || @ARGV) { pod2usage(1); } my @seq_ids = (); my %msa = (); # read the first line, first should not be blank my $title = <>; while (my $line = <>) { chomp $line; next unless ($line); next if ($line =~ m/^[\s:\*\+\.]+$/); # skip conservation line my ($seq_id, $align) = split(/\s+/,$line); if (defined($msa{$seq_id})) { $msa{$seq_id} .= $align; } else { $msa{$seq_id} = $align; push @seq_ids, $seq_id; } } for my $seq_id ( @seq_ids ) { my $fmt_seq = $msa{$seq_id}; $fmt_seq =~ s/(.{0,60})/$1\n/g; print ">$seq_id\n$fmt_seq"; } __END__ =pod =head1 NAME clustal2fasta.pl =head1 SYNOPSIS clustal2fasta.pl clustal.msa =head1 OPTIONS -h short help --help include description =head1 DESCRIPTION C takes a Clustal format interleaved multiple sequence alignment and produces the corresponding fasta format library. =head1 AUTHOR William R. Pearson, wrp@virginia.edu =cut fasta36-36.3.8i_14-Nov-2020/psisearch2/clustal2fasta.py000077500000000000000000000046441433453312700220650ustar00rootroot00000000000000#!/usr/bin/env python ################################################################ # copyright (c) 2014,2015 by William R. Pearson and The Rector & # Visitors of the University of Virginia */ ################################################################ # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under this License is distributed on an "AS # IS" BASIS, WITHOUT WRRANTIES OR CONDITIONS OF ANY KIND, either # express or implied. See the License for the specific language # governing permissions and limitations under the License. ################################################################ ################################################################ # clustal2fasta.pl ################################################################ # clustal2fasta.pl takes a standard clustal format alignment file # and produces the corresponding FASTA file. # # if --end_mask or --int_mask are set, then end or internal '-'s are converted to the query (first) sequence # if --trim is set, then alignments beyond the beginning/end of the query sequence are trimmed # ################################################################ import argparse import fileinput import re ################ # # python re-write of clustal2fasta.pl # # in the future, modify for various query seeding strategies ################ arg_parse = argparse.ArgumentParser(description='Convert clustal MSA to FASTA library') arg_parse.add_argument('--query|--query_file', dest='query_file', action='store',help='query sequence file') arg_parse.add_argument('files', metavar='FILE', nargs='*', help='files to read, if empty, stdin is used') args=arg_parse.parse_args() msa = {} seq_ids = [] is_line1 = True for line in fileinput.input(args.files): if is_line1: is_line1 = False continue line = line.strip() if not line: continue if re.search(r'^[\s:\*\+\.]+$',line): continue (seq_id, align) = re.split(r'\s+',line) if seq_id in msa: msa[seq_id] += align else: msa[seq_id] = align seq_ids.append(seq_id) for seq_id in seq_ids: fmt_seq = re.sub(r'(.{0,60})',r'\1\n',msa[seq_id]) print(">%s\n%s" % (seq_id, fmt_seq)) fasta36-36.3.8i_14-Nov-2020/psisearch2/m89_btop_msa2.pl000077500000000000000000000712601433453312700216610ustar00rootroot00000000000000#!/usr/bin/env perl ################################################################ # copyright (c) 2014,2015 by William R. Pearson and The Rector & # Visitors of the University of Virginia */ ################################################################ # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under this License is distributed on an "AS # IS" BASIS, WITHOUT WRRANTIES OR CONDITIONS OF ANY KIND, either # express or implied. See the License for the specific language # governing permissions and limitations under the License. ################################################################ ################################################################ # m89_btop_msa2.pl --query query.file blast_tab_btop_file ################################################################ # m89_btop_msa2.pl takes a query sequence and either a BLAST -outfmt # 7/fasta -m 8CB output file (default) or fasta -m 8B (--m_format m9) # output file with a BTOP field, and constructs a query-driven # multiple sequence alignment of the subject sequences that can be # used as input to psiblast with the "--in_msa msa.file" option. # # (because BLAST BTOP encoding provides the mismatched residues, the # library sequences are not required to produce the MSA -- they are # available in the BTOP string) # # The BTOP alignment encoding file generated from "blastp/n" or # "blast_formatter" using the command: blast_formatter -archive # blast_output.asn -outfmt '7 qseqid sseqid pident length mismatch # gapopen qstart qend sstart send evalue bitscore score btop' > # blast_output.tab_annot # ################################################################ use warnings; use strict; use Pod::Usage; use Getopt::Long; # read lines of the form: # gi|121694|sp|P20432.1|GSTT1_DROME gi|121694|sp|P20432|GSTT1_DROME 100.00 209 0 0 1 209 1 209 6e-156 433 1113 209 # gi|121694|sp|P20432.1|GSTT1_DROME gi|1170090|sp|P04907|GSTF3_MAIZE 26.77 198 123 7 4 185 6 197 2e-08 51.2 121 FL1YG ... 1NKRA1YW1 # gi|121694|sp|P20432.1|GSTT1_DROME gi|81174731|sp|P0ACA5|SSPA_ECO57 39.66 58 32 2 43 100 49 103 8e-06 43.9 102 EDFLLI ... V-I-NEQS3FM # gi|121694|sp|P20432.1|GSTT1_DROME gi|121695|sp|P12653|GSTF1_MAIZE 27.62 181 107 7 32 203 34 199 9e-05 40.8 94 LI1LF ... N-1AS1CLLM1 my ($shelp, $help, $m_format, $evalue, $qvalue, $domain_bound) = (0, 0, "m8CB", 0.001, 30.0,0); my ($query_file, $sel_file, $bound_file_in, $bound_file_only, $bound_file_out, $masked_lib_out,$mask_type_end, $mask_type_int) = ("","","","","","","",""); my ($clustal_id,$trunc_acc,$min_align) = (0,0,0.0); my $query_lib_r = 0; my ($eval2_fmt, $eval2) = (0,""); GetOptions( "query=s" => \$query_file, "query_file=s" => \$query_file, "eval2=s" => \$eval2, # change the evalue used for inclusion "evalue|expect=f" => \$evalue, "qvalue=f" => \$qvalue, "format=s" => \$m_format, "clustal!" => \$clustal_id, "trunc_acc!" => \$trunc_acc, "selected_file_in|sel_file_in|sel_accs=s" => \$sel_file, "m_format|mformat=s" => \$m_format, "bound_file_in=s" => \$bound_file_in, "bound_file_only=s" => \$bound_file_only, "bound_file_out=s" => \$bound_file_out, "bound_in=s" => \$bound_file_in, "bound_only=s" => \$bound_file_only, "bound_out=s" => \$bound_file_out, "masked_library_out=s" => \$masked_lib_out, "masked_lib_out=s" => \$masked_lib_out, "mask_lib_out=s" => \$masked_lib_out, "mask_out=s" => \$masked_lib_out, "end_mask_type=s" => \$mask_type_end, "end_mask=s" => \$mask_type_end, "domain_bound" => \$domain_bound, "domain" => \$domain_bound, "int_mask_type=s" => \$mask_type_int, "int_mask=s" => \$mask_type_int, "min_align=f" => \$min_align, "h|?" => \$shelp, "help" => \$help, ); pod2usage(1) if $shelp; pod2usage(exitstatus => 0, verbose => 2) if $help; unless (-f STDIN || -p STDIN || @ARGV) { pod2usage(1); } ################ # initialization my @random_res = (); if ($mask_type_end =~ m/^rand/i) { @random_res = init_random_res(); } my @m9_field_names = qw(percid perc_sim raw_score a_len q_start q_end qc_start qc_end s_start s_end sc_start sc_end gap_q gap_l fs); my @m8_field_names = qw(q_seqid s_seqid percid a_len mismatch gopen q_start q_end s_start s_end evalue bits); my @hit_list = (); my %seq_bound = (); # boundaries for each accession my %acc_names = (); # generate uniq s_seq_id names my %multi_align = (); my @multi_names = (); ################ # get query sequence, and insert into MSA # my ($query_acc, $query_seq_r, $query_len); if ($query_file) { ($query_acc, $query_seq_r) = parse_query_lib($query_file); $query_len = scalar(@$query_seq_r)-1; # -1 for ' ' 1: offset } if (! $query_file || !$query_len) { die "query sequence required"; } my %sel_accs = (); my $have_sel_accs = 0; if ($sel_file) { if (open (my $sfd, $sel_file)) { while (my $line = <$sfd>) { chomp $line; next if $line =~ m/^#/; if ($line =~ m/\t/) { my @data = split(/\t/,$line); $sel_accs{$data[0]} = $data[1]; } else { $sel_accs{$line} = 1; } } close($sfd); $evalue = 1000000.0; $have_sel_accs = 1; } else { warn "Cannot open selected sequence file: $sel_file"; } } push @multi_names, $query_acc; $acc_names{$query_acc} = 1; $multi_align{$query_acc} = btop2alignment($query_seq_r, $query_len, {BTOP=>$query_len, q_start=>1, q_end=>$query_len}, 0); my $max_sseqid_len = length($query_acc); ################ # get sequence boundaries if available # my $seq_bound_hr = 0; my @seq_bound_accs = (); $seq_bound_hr = \%seq_bound; if ($bound_file_in) { $seq_bound_hr = parse_bound_file($bound_file_in); } elsif ($bound_file_only) { $seq_bound_hr = parse_bound_file($bound_file_only); } ################ # skip down to "The best scores are:" # my ($q_num, $query_descr, $q_len, $lib_cnt, $lib_len, $best_yes, $last_fields_r); if ($m_format =~ m/^m9/i) { ($q_num, $query_descr, $q_len, $lib_cnt, $lib_len, $best_yes) = skip_to_m9results(); warn "Cannot find the best scores are:" unless $query_descr; } elsif ($m_format =~ m/^m8/) { ($query_descr, $best_yes, $last_fields_r) = skip_to_m8results(); warn "Cannot find the best scores are: in $ARGV" unless $query_descr; if (scalar(@{$last_fields_r})) { push @m8_field_names, @{$last_fields_r}; } push @m8_field_names, "annot"; } else { die "cannot recognize format: $m_format"; } my $eval_fptr = \&eval_func; if ($eval2_fmt && $eval2) { if($eval2 eq 'eval2') { $eval_fptr = \&eval2_func; } elsif ($eval2 eq 'ave') { $eval_fptr = \&eval_ave; } } my ($tmp, $gi, $q_db, $q_acc, $q_id); if ($query_descr =~ /^gi\|\d+\|/) { ($tmp, $gi, $q_db, $q_acc, $q_id) = split(/\|/,$query_descr); } elsif ($query_descr eq 'unnamed') { $q_acc = 'unnamed' } else { ($q_db,$q_acc, $q_id) = split(/\|/,$query_descr); } unless ($q_acc) { $q_acc = $query_descr; } $acc_names{$q_acc} = $q_acc; # this is necessary for the new acc-only NCBI SwissProt libraries $q_acc =~ s/\.\d+$//; while (my $line = <>) { chomp $line; next unless ($line); my %hit_data =(); my ($s_seqid, $subj_acc, $s_seqid_u); my $annot_f='NULL'; if ($m_format =~ m/^m9/i) { last if $line =~ m/>>>/ || $line =~ m/^<\/pre>/; next if $line =~ m/^\+\-/; # skip over HSPs my ($left, $right, $align_f) = ("","",'NULL'); ($left, $right, $align_f, $annot_f) = split(/\t/,$line); $align_f= 'NULL' unless $align_f; $annot_f= 'NULL' unless $annot_f; if ($left =~ m///; $left =~ s/<\/font>//; } my @fields = split(/\s+/,$left); $subj_acc = $s_seqid = $fields[0]; # my ($ldb, $l_id, $l_acc) = ("","",""); # if ($fields[0] =~ m/:/) { # ($ldb, $l_id) = split(/:/,$fields[0]); # ($l_acc) = $fields[1]; # } else { # ($ldb, $l_acc,$l_id) = split(/\|/,$fields[0]); # } @hit_data{@m9_field_names} = split(/\s+/,$right); if ($eval2_fmt) { @hit_data{qw(bits evalue eval2)} = @fields[-3, -2,-1]; } else { @hit_data{qw(bits evalue)} = @fields[-2,-1]; } # # currently preselbdr files have $ldb|$l_acc, not full s_seqid, so construct it # # ($s_seqid, $subj_acc) = (join('|',($ldb, $l_acc, $l_id)), "$ldb|$l_acc"); @hit_data{qw(s_seqid subj_acc)} = ($s_seqid, $subj_acc); @hit_data{qw(query_id query_acc)} = ($query_descr, $q_acc); $hit_data{BTOP} = $align_f; $hit_data{annot} = $annot_f; } else { last if $line =~ m/^#/; @hit_data{@m8_field_names} = split(/\t/,$line); $subj_acc = $hit_data{'s_seqid'}; # remove gi number if ($subj_acc =~ m/^gi|\d+\|/) { $subj_acc =~ s/^gi\|\d+\|//; } } if ($have_sel_accs) { next unless ($sel_accs{$hit_data{'s_seqid'}}); } # a better solution would be to rename the q_seqid, or at least to # check for identity # next if ($hit_data{q_seqid} eq $hit_data{s_seqid}); next if ($hit_data{a_len} == $query_len && $hit_data{BTOP} =~ m/^$query_len$/); $s_seqid_u = $hit_data{'s_seqid'}; if ($acc_names{$s_seqid_u}) { next; # skip additional HSPs # $acc_names{$s_seqid_u}++; # $s_seqid_u .= "_". $acc_names{$subj_acc}; } else { my $tr_acc = $hit_data{'s_seqid'}; $acc_names{$hit_data{'s_seqid'}} = 1; } # must be after duplicate seqid check because blast HSP's have bad E-values after good. next if ($eval_fptr->(\%hit_data) > $evalue); next if (($hit_data{q_end}-$hit_data{q_start}+1)/$query_len < $min_align); $hit_data{s_seqid_u} = $s_seqid_u; my $have_dom = 0; if ($domain_bound && $hit_data{annot}) { my $hit_doms_ar = parse_hit_domains($hit_data{annot}); # scan from left to right to make domain boundaries based on $qvalue # the following seems reversed, but it is putting upper (and lower) limits on boundaries my ($left_bound, $right_bound) = @hit_data{qw(s_end s_start)}; foreach my $dom_r ( @$hit_doms_ar ) { next unless $dom_r->{target} eq 'subj'; # next if $dom_r->{virtual}; # should be controlled by annotation process next unless $dom_r->{qval} > $qvalue; if ($dom_r->{s_start} < $left_bound) { $left_bound = $dom_r->{s_start}; $have_dom = 1; } if ($dom_r->{s_end} > $right_bound) { $right_bound = $dom_r->{s_end}; $have_dom = 1; } } if ($have_dom) { if (exists($seq_bound_hr->{$subj_acc})) { @{$seq_bound_hr->{$subj_acc}}{qw(start end)} = ($left_bound, $right_bound); } else { $seq_bound_hr->{$subj_acc} = {start=>$left_bound, end=>$right_bound}; push @seq_bound_accs, $subj_acc; } } } # must have separate @hit_list that can be sorted, for searches with multiple alignment results if ($bound_file_only || $have_dom) { if (exists($seq_bound_hr->{$subj_acc})) { my ($status, $alignment) = bound_btop2alignment($query_seq_r, $query_len, \%hit_data, @{$seq_bound_hr->{$subj_acc}}{qw(start end)}); if ($status) { # aligment is within boundary push @multi_names, $hit_data{s_seqid_u}; $multi_align{$hit_data{s_seqid_u}} = $alignment; } # do not delete entry, because it needs to be preserved } } elsif ($bound_file_in) { if (exists($seq_bound_hr->{$subj_acc})) { my ($status, $alignment) = bound_btop2alignment($query_seq_r, $query_len, \%hit_data, @{$seq_bound_hr->{$subj_acc}}{qw(start end)}); if ($status) { push @multi_names, $hit_data{s_seqid_u}; $multi_align{$hit_data{s_seqid_u}} = $alignment; # push @multi_align, $alignment; } } else { push @multi_names, $hit_data{s_seqid_u}; # push @multi_align, btop2alignment($query_seq_r, $query_len, \%hit_data, ); $multi_align{$hit_data{s_seqid_u}} = btop2alignment($query_seq_r, $query_len, \%hit_data); @{$seq_bound_hr->{$subj_acc}}{qw(start end)} = @hit_data{qw(s_start s_end)}; push @seq_bound_accs, $subj_acc; } } else { # no sequence boundaries push @multi_names, $hit_data{s_seqid_u}; $multi_align{$hit_data{s_seqid_u}} = btop2alignment($query_seq_r, $query_len, \%hit_data); # push @multi_align, btop2alignment($query_seq_r, $query_len, \%hit_data); if (!$have_dom && ($bound_file_out)) { @{$seq_bound_hr->{$subj_acc}}{qw(start end)} = @hit_data{qw(s_start s_end)}; push @seq_bound_accs, $subj_acc; } } } $max_sseqid_len = 10; for my $acc ( @multi_names) { my $this_len = length($acc); if ($trunc_acc && ($acc=~m/\|\w+\|(\w+)$/)) { $this_len = length($1); } if ($this_len > $max_sseqid_len) { $max_sseqid_len = $this_len; } } # final MSA output $max_sseqid_len += 2; if (! $clustal_id) { printf "BTOP%s multiple sequence alignment\n\n\n",$m_format; } else { print "CLUSTALW (1.8) multiple sequence alignment\n\n\n"; } my $i_pos = 0; for (my $j = 0; $j < $query_len/60; $j++) { my $i_end = $i_pos + 59; if ($i_end >= $query_len) {$i_end = $query_len-1;} for my $acc (@multi_names) { next unless $acc; my $this_acc = $acc; if ($trunc_acc && ($acc=~m/\|\w+\|(\w+)$/)) { $this_acc = $1; } printf("%-".$max_sseqid_len."s %s\n",$this_acc,join("",@{$multi_align{$acc}}[$i_pos .. $i_end])); } $i_pos += 60; print "\n\n"; } ################ # if bound_file_out provide it if ($bound_file_out) { open(my $bound_fd, ">", $bound_file_out) || die "cannot open $bound_file_out"; for my $s_acc ( @seq_bound_accs ) { print $bound_fd join("\t", ($s_acc, @{$seq_bound_hr->{$s_acc}}{qw(start end)})),"\n"; } close($bound_fd); } if ($masked_lib_out) { open(my $masked_fd, ">", $masked_lib_out) || die "cannot open $masked_lib_out"; for my $s_acc ( @multi_names ) { print $masked_fd ">$s_acc\n"; # here we have four choices for masking: # (1) simply delete the '-'s # (2) delete the leading/trailing '-',s replace interal '-'s with 'X' # (3) replace leading/trailing '-' with 'X', remove internal # (4) replace leading/trailing '-' with query sequence, remove internal # (5) replace leading/trailing '-' with random, remove internal # (6) replace leading/trailing '-' with random, internal with 'X' # my @masked_seq = @{$multi_align{$s_acc}}; my $seq = join('',@{$multi_align{$s_acc}}); my @masked_seq = @{$multi_align{$s_acc}}; my $n_res = scalar(@masked_seq); my $n_rand_res = scalar(@random_res); if ($mask_type_end =~ m/x/i) { for (my $i=0; $i < $n_res; $i++) { last if ($masked_seq[$i] ne '-') ; $masked_seq[$i] = 'X'; } for (my $i=$n_res-1; $i >= 0; $i--) { last if ($masked_seq[$i] ne '-') ; $masked_seq[$i] = 'X'; } } elsif ($mask_type_end =~ m/^q/i) { if ($mask_type_int =~ m/^q/i) { for (my $i=0; $i < $n_res; $i++) { if ($masked_seq[$i] eq '-') { $masked_seq[$i] = $multi_align{$query_acc}[$i]; } } } else { my $li = 0; for ( ; $li < $n_res; $li++) { last if ($masked_seq[$li] ne '-') ; $masked_seq[$li] = $multi_align{$query_acc}[$li]; } my $ri = $n_res-1; for ( ; $ri >= 0; $ri--) { last if ($masked_seq[$ri] ne '-') ; $masked_seq[$ri] = $multi_align{$query_acc}[$ri]; } if ($mask_type_int =~ m/^rand/i) { for (my $i=$li; $i <= $ri; $i++) { if ($masked_seq[$i] eq '-') { $masked_seq[$i] = $random_res[int(rand($n_rand_res))]; } } } } } elsif ($mask_type_end =~ m/^rand/i) { if ($mask_type_int =~ m/^rand/i) { for (my $i=0; $i < $n_res; $i++) { if ($masked_seq[$i] eq '-') { $masked_seq[$i] = $random_res[int(rand($n_rand_res))]; } } } else { for (my $i=0; $i < $n_res; $i++) { last if ($masked_seq[$i] ne '-') ; $masked_seq[$i] = $random_res[int(rand($n_rand_res))]; } for (my $i=$n_res-1; $i >= 0; $i--) { last if ($masked_seq[$i] ne '-') ; $masked_seq[$i] = $random_res[int(rand($n_rand_res))]; } } } my $masked_seq = join("",@masked_seq); if ($mask_type_int =~ m/X/) { $masked_seq =~ s/\-/X/g; } else { $masked_seq =~ s/\-//g; } $masked_seq =~ s/(.{60})/$1\n/g; print $masked_fd "$masked_seq\n"; } close($masked_fd); } # input: a blast BTOP string of the form: "1VA160TS7KG10RK27" # returns a list_ref of tokens: (1, "VA", 60, "TS", 7, "KG, 10, "RK", 27) # sub decode_btop { my ($btop_str) = @_; my @tokens = split(/(\d+)/,$btop_str); shift @tokens unless $tokens[0]; my @out_tokens = (); for my $token (@tokens) { if ($token =~ m/^\d+$/) { push @out_tokens, $token } else { my @mis_tokens = split(/(..)/,$token); for my $mis (@mis_tokens) { if ($mis) {push @out_tokens, $mis}; } } } return \@out_tokens; } sub parse_hit_domains { my ($annot_str) = @_; ## annot_str looks like: "|RX:6-65:6-65:s=311;b=125.4;I=1.000;Q=339.6;C=C.HTH~1 # |XR:6-65:6-65:s=311;b=125.4;I=1.000;Q=339.6;C=C.HTH~1 # |RX:66-297:66-297:s=1200;b=483.7;I=1.000;Q=1409.6;C=NODOM~0 # |XR:66-297:66-297:s=1200;b=483.7;I=1.000;Q=1409.6;C=NODOM~0 return 0 unless ($annot_str); my @hit_annots = (); my @annots = split(/\|/,$annot_str); shift @annots; # remove first blank for my $annot ( @annots ) { my %dom_info = (); # parse an entry: # |RX:6-65:6-65:s=311;b=125.4;I=1.000;Q=339.6;C=C.HTH~1 my @d_fields = split(";",$annot); ($dom_info{dom}) = ($d_fields[4] =~ m/C=(.+?)~?\d*v?$/); # also remove virtual domain symbols next if ($dom_info{dom} =~ m/NODOM/); ################ # parse @d_fields if ($d_fields[4] =~ m/v$/) { $dom_info{virtual} = 1; } else { $dom_info{virtual} = 0; } ($dom_info{bits}) = ($d_fields[1] =~ m/b=(\-?\d+\.?\d*)/); unless (defined($dom_info{bits})) { warn "missing score info - annot: $annot\n annot_str: $annot_str"; $dom_info{bits} = '\N'; } ($dom_info{percid}) = ($d_fields[2] =~ m/I=(\-?[\d\.]+)/); unless (defined($dom_info{percid})) { warn "missing percid info - annot: $annot\n annot_str: $annot_str"; $dom_info{percid} = '\N'; } ($dom_info{qval}) = ($d_fields[3] =~ m/Q=([\d\.]+)/); ################ # parse @c_fields my @c_fields = split(":",$d_fields[0]); if ($c_fields[0] =~ m/RX/) {$dom_info{target} = 'query';} else {$dom_info{target} = 'subj';} @dom_info{qw(q_start q_end)} = ($c_fields[1] =~ m/(\d+)\-(\d+)/); @dom_info{qw(s_start s_end)} = ($c_fields[2] =~ m/(\d+)\-(\d+)/); ($dom_info{score}) = ($c_fields[3] =~ m/s=(\-?\d+)/); unless (defined($dom_info{score})) { warn "missing score info - annot: $annot\n annot_str: $annot_str"; $dom_info{score} = '\N'; } push @hit_annots, \%dom_info; } return \@hit_annots; } sub btop2alignment { my ($query_seq_r, $query_len, $hit_data_hr, $seq_bound_hr) = @_; # $query_seq_r is 1: based my @alignment = (); # the left unaligned region gets " "; for (my $i=1; $i < $hit_data_hr->{q_start}; $i++) { push @alignment, "-"; } my $btop_align_r = decode_btop($hit_data_hr->{BTOP}); my ($seq0, $seq1) = ("",""); my $qix = $hit_data_hr->{q_start}; for my $btop (@{$btop_align_r}) { if ($btop =~ m/^\d+$/) { # matching query sequence, add it up for (my $i=0; $i < $btop; $i++) { push @alignment, $query_seq_r->[$qix++]; } } else { # could be: TS/-S/T- ($seq0, $seq1) = split(//,$btop); if ($seq0 ne '-') { push @alignment, $seq1; $qix++; } } } # all done with alignment, double check that $qix = $hit_data_hr->{q_end} unless ($qix == $hit_data_hr->{q_end}+1) { warn "$qix != ".$hit_data_hr->{q_end}+1; } for (my $i = $hit_data_hr->{q_end}+1; $i <= $query_len; $i++) { push @alignment, "-"; } return \@alignment; } ################ # generates MSA alignment entry between $sb_start and $sb_end # if there are no aligned residues between these locations, return $status=0 sub bound_btop2alignment { my ($query_seq_r, $query_len, $hit_data_hr, $sb_start, $sb_end) = @_; # $query_seq_r is 1: based my @alignment = (); my $have_aligned_res = 0; # the left unaligned region gets " "; for (my $i=1; $i < $hit_data_hr->{q_start}; $i++) { push @alignment, "-"; } my $btop_align_r = decode_btop($hit_data_hr->{BTOP}); my ($seq0, $seq1) = ("",""); my ($qix, $six) = @{$hit_data_hr}{qw(q_start s_start)}; for my $btop (@{$btop_align_r}) { if ($btop =~ m/^\d+$/) { # matching query sequence, add it up for (my $i=0; $i < $btop; $i++) { if ($six >= $sb_start && $six <= $sb_end) { push @alignment, $query_seq_r->[$qix]; $have_aligned_res=1; } else { push @alignment, '-'; } $qix++; $six++; } } else { # could be: TS/-S/T- ($seq0, $seq1) = split(//,$btop); if ($seq1 eq '-') { # gap in subject push @alignment, '-'; $qix++; } elsif ($seq0 ne '-') { # mismatch if ($six >= $sb_start && $six <= $sb_end) { $have_aligned_res=1; push @alignment, $seq1; } else { push @alignment, '-'; } $qix++; $six++; } else { # gap in query, consume $six $six++; } } } # all done with alignment, double check that $qix = $hit_data_hr->{q_end} unless ($qix == $hit_data_hr->{q_end}+1) { warn $qix." != ".$hit_data_hr->{q_end}+1; } for (my $i = $hit_data_hr->{q_end}+1; $i <= $query_len; $i++) { push @alignment, "-"; } return ($have_aligned_res, \@alignment); } sub parse_query_lib { my ($query_file) = @_; my %query_seqs = (); open(my $qfd, $query_file); my ($header, $sequence) = ("",""); while (my $entry = <$qfd>) { # returns an entire fasta entry chomp $entry; if ($entry =~ m/^>/) { $header = $entry; } else { $sequence .= $entry } } $sequence =~ s/[^A-Za-z\*]//g; # remove everything but letters $sequence = uc($sequence); $header =~ s/^>//; $header =~ s/\s.*$//; my @seq = split(//,$sequence); unshift @seq,""; # @seq is now 1-based close($qfd); return ($header, \@seq); } sub parse_bound_file { my ($bound_file) = @_; open(my $qfd, $bound_file) || return 0; while (my $line = <$qfd>) { next if ($line =~ m/^#/); chomp $line; my @data = split(/\t/,$line); if (!defined($seq_bound{$data[0]})) { $seq_bound{$data[0]} = {start=>$data[1], end=>$data[2]}; push @seq_bound_accs, $data[0]; } else { warn "multiple boundaries for $data[0]"; } } return \%seq_bound; } sub skip_to_m9results { my ($q_num, $query_desc, $q_start, $q_stop, $q_len, $l_num, $l_len, $best_yes); while (my $line = <>) { if ($line =~ m/^\s*(\d+)>>>(\S+)\s.*\- (\d+) aa$/) { ($q_num,$query_desc, $q_len) = ($1,$2,$3); # ($q_len) = ($line =~ m/(\d+) aa$/); $line = <>; # skip Library: $line = <>; # 153571012 residues in 291716 sequences ($l_len, $l_num) = ($line =~ m/^\s+(\d+)\s+residues in\s+(\d+)/); goto have_query; } elsif ($line =~ m/>>>\/\/\//) {goto done;} } done: return (0,""); have_query: while (my $line = <>) { $best_yes = 0; if ($line =~ m/^The best scores are:/) { $best_yes = 1; $eval2_fmt = 1 if ($line =~ m/E2()/); last; } last if ($line =~ m/^!! No sequences/); } return ($q_num, $query_desc,$q_start, $q_stop, $q_len, $l_num, $l_len, $best_yes); } sub skip_to_m8results { my ($query_desc, $best_yes); $best_yes = 0; $eval2_fmt = 0; my @last_fields = (); while (my $line = <>) { if ($line =~ m/^# Query:/) { # Query: ($query_desc) = ($line =~ m/^# Query:\s+(\S+)/); $query_desc = 'unnamed' unless ($query_desc); # ($q_len) = ($line =~ m/(\d+) aa$/); $line = <>; # Database: $line = <>; # Fields: unless ($line =~ m/# Fields:/) { warn "!!! warning !!!: # Fields not found: $line"; } if ($line =~ m/,\seval2/) { # only with FASTA push @last_fields, "eval2"; $eval2_fmt = 1; } if ($line =~ m/,\sscore,\s+BTOP/i) { # only with BLAST push @last_fields, qw(score BTOP); } elsif ($line =~ m/\BTOP,\s+score/i) { push @last_fields, qw(BTOP score); } elsif ($line =~ m/,\s+BTOP/) { push @last_fields, qw(BTOP); } $line = <>; # NNN fits found or if ($line =~ m/^#\s+\d+\s+hits found/) { $best_yes = 1; } goto have_query; } elsif ($line =~ m/>>>\/\/\//) {goto done;} } done: return (0,""); have_query: return ($query_desc, $best_yes, \@last_fields); } ################ # eval_func -- return evalue sub eval_func { my ($hit) = @_; return $hit->{evalue}; } # eval_func -- return evalue sub eval2_func { my ($hit) = @_; return $hit->{eval2}; } # eval_func -- return evalue sub eval_ave { my ($hit) = @_; return sqrt($hit->{evalue}*$hit->{eval2}); } ################ # init_random_res initializes a 1000 element array of amino acid residues with Robinson/Robinson frequencies sub init_random_res { my @rr_res = qw(A R N D C Q E G H I L K M F P S T W Y V); my @rr_counts = (35155, 23105, 20212, 24161, 8669, 19208, 28354, 33229, 9906, 23161, 40625, 25872, 10101, 17367, 23435, 32070, 26311, 5990, 14488, 29012); my $rr_total = 450431; my $rr_seq = ""; for (my $i=0; $i < 20; $i++) { $rr_seq = $rr_seq . $rr_res[$i] x int(1000.0 *$rr_counts[$i]/$rr_total + 0.5); } return split(//,$rr_seq); } __END__ =pod =head1 NAME m89_btop_msa2.pl =head1 SYNOPSIS m89_btop_msa2.pl --query_file query.fasta fasta_m8CB_output.file m89_btop_msa2.pl --query_file query.fasta blast_outfmt7_BTOP.output.file m89_btop_msa2.pl --query_file query.fasta [--m_format m9] fasta_m9C_output.file =head1 OPTIONS -h short help --help include description --query_file -- query sequence file --query -- same as --query_file (only one sequence per file) --expect|evalue: 0.001 -- maximum e-value to be include in output --eval2 : "": use E()-value, "eval2": use E2()/eval2, "ave": use geom. mean --qvalue: 30.0 -- minimum qvalue for domain to be considered --bound_file_in -- tab delimited accessionstartend that specifies MSA boundaries WITHIN alignment. Additional hits use alignment (or domain) boundaries. --bound_file_only -- tab delimited accessionstartend that specifies MSA boundaries WITHIN alignment. Only sequences in --bound_file_only will be in the MSA. --bound_file_out -- "--bound_file" for next iteration of psisearch2 --clustal -- use "CLUSTALW (1.8)" multiple alignment string --trunc_acc -- remove db, acc from db|acc|ident, e.g. sp|P0948|GSTM1_HUMAN becomes GSTM1_HUMAN --domain_bound parse domain annotations (-V) from m9B file --domain --masked_lib_out -- FASTA format library of MSA sequences --min_align:0.0 -- minimum fractional alignment (q_end-q_start+1)/q_len --int_mask_type = "query", "rand", "X", "none" --end_mask_type = "query", "rand", "X", "none" specify the residues to be inserted into output library =head1 DESCRIPTION C takes a fasta36/ssearch36 -m 9B ouput file, which includes a BTOP encoded alignment string, and produces the multiple sequence alignment (MSA) implied by the query sequence, alignment boundaries, and pairwise alignments. The alignment does not allow gaps in the query sequence, only in the subject sequences. The C<--query_file> must be specified, and the query sequence is provided as the first sequence in the MSA. If a C<--bound_file> is provided, then the ends of the alignments are reduced to the coordinates specified by the C. In addition, only sequences included in the C are included in the MSA. Output: A clustal-like interleaved multiple sequence alignment that can be used as input (using the C<-in_msa> option) to C. If an C<--masked_lib_out> filename.fasta is specified, a version of the MSA in FASTA format is written to filename.fasta. This file can be converted to BLAST format (C) and and the converted blast library can be used to rebuild a PSSM with C. The sequences in the C<--masked_lib_out> fasta file can be modifed where gaps are present in the MSA as specified by the C<--int_mask_type> and C<--end_mask_type> options. If no --int_mask_type/--end_mask_type is specified ("none"), then the subject sequence in the output library matches the aligned part of the subject sequenc (gaps characters are deleted). If the --end/int_mask_type is "query", "rand", or "X", then either the aligned query residue, a random residue, or an "X" substituted at each gap, producing a library of subject sequences that may differ from the original subject sequences. These different options can be used to force C to build a PSSM that more accurately reflects the original C alignment. =head1 AUTHOR William R. Pearson, wrp@virginia.edu =cut fasta36-36.3.8i_14-Nov-2020/psisearch2/psisearch2_msa.pl000077500000000000000000000443301433453312700221770ustar00rootroot00000000000000#!/usr/bin/env perl ################################################################ # copyright (c) 2016,2020 by William R. Pearson and The Rector & # Visitors of the University of Virginia ################################################################ # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under this License is distributed on an "AS # IS" BASIS, WITHOUT WRRANTIES OR CONDITIONS OF ANY KIND, either # express or implied. See the License for the specific language # governing permissions and limitations under the License. ################################################################ ################################################################ # 5-July-2020 # modification to allow older blast version, (2.6.0+), as current version (2.10.1+) # has problem with asnbin/asntxt files # use warnings; use strict; use Getopt::Long; use Pod::Usage; ################ # implementation of simple shell script to do iterative searches # # logic: # (1) do initial search or take results from previous search with --prev_m89res # (2) use results of initial search to produce MSA/PSSM for next search # (3) do PSSM search # (4) repeat at step (2) # ################ # # command: # psisearch2_msa.pl --query query.file --in_msa msa.file --db database.file --num_iter N --pssm_evalue 0.002 --int_mask none/query/random --end_mask none/query/random --tmp_dir results/ --domain --align --out_suffix none --pgm ssearch/psiblast --prev_m89res prev_results.itx.m8CB.file --sel_res selected_accs.file --prev_bounds boundary.file # ################ use vars qw( $query_file $db_file $num_iter $pssm_evalue $srch_evalue $int_mask $end_mask $query_mask $tmp_dir $dom_flag $align_flag $suffix $srch_pgm $file_out $help $shelp $error_log $rm_flag $annot_type $quiet); use vars qw( $prev_m89res $m_format $prev_sel_res $this_iter $prev_msa $next_msa $prev_hitdb $next_hitdb $prev_pssm $next_pssm $prev_bound $next_bound_out $tmp_file_list $save_all $delete_bnd $delete_tmp $use_stdout); ################ # locations of required programs: # (1) m89_btop_msa2.pl # (2) ssearch # (3) NCBI blast+ programs: psiblast/makeblastdb # (4) NCBI datatool (required only for ssearch36 PSSMs) my $pgm_bin = "/seqprg/bin"; my $pgm_data = "/seqprg/data"; my $ssearch_bin = "$pgm_bin/ssearch36"; my $align2msa_lib = "$pgm_bin/m89_btop_msa2.pl"; my $clustal2fasta = "$pgm_bin/clustal2fasta.pl"; ## this has been added (5-July-2020) because the script does not work with ncbi-blast-2.10.1+ (or 2.10.0+) my $ncbi_bin = "~wrp/src/ncbi-blast-2.9.0+/bin"; if (defined($ENV{NCBI_BLAST_BIN})) { $ncbi_bin = $ENV{NCBI_BLAST_BIN}; } my $psiblast_bin = "$ncbi_bin/psiblast"; my $makeblastdb_bin = "$ncbi_bin/makeblastdb"; ## ncbi datatool is not part of the BLAST distribution my $datatool_bin = "$pgm_bin/datatool -m $pgm_data/NCBI_all.asn"; my %srch_subs = ('ssearch' => \&get_ssearch_cmd, 'psiblast' => \&get_psiblast_cmd, ); my %annot_cmds = ('rpd3' => qq("\!ann_pfam28.pl --pfacc --db RPD3 --vdoms --split_over"), 'rpd3nv' => qq("\!ann_pfam28.pl --pfacc --db RPD3 --split_over"), 'rpd3nvn' => qq("\!./annot/ann_pfam28.pl --pfacc --db RPD3 --split_over --neg"), 'pfam' => qq("\!./annot/ann_pfam30.pl --db pfam33_qfo --vdoms --split_over --neg") ); ($num_iter, $pssm_evalue, $srch_evalue, $dom_flag, $align_flag, $int_mask, $end_mask, $query_mask, $srch_pgm, $tmp_dir, $error_log, $annot_type, $quiet) = ( 5, 0.002, 5.0, 0, 0, 'none', 'none', 0, 'ssearch','',0, 0, "", 0); ($save_all, $tmp_file_list, $delete_bnd, $delete_tmp) = (0, "", 0, 0); ($prev_m89res, $m_format, $prev_sel_res, $prev_bound, $this_iter, $use_stdout) = ("","m8CB", "","", 1, 0); my $pgm_command = "# ".join(" ",($0,@ARGV)); print STDERR "# ",join(" ",($0,@ARGV)),"\n" if ($error_log); GetOptions( 'query|sequence=s' => \$query_file, 'db|database=s' => \$db_file, 'suffix|out_suffix=s' => \$suffix, 'dir=s' => \$tmp_dir, 'pssm_evalue=f' => \$pssm_evalue, 'search_evalue=f' => \$srch_evalue, 'annot_db=s' => \$annot_type, 'out_name=s' => \$file_out, 'use_stdout' => \$use_stdout, 'this_iter=s' => \$this_iter, 'iter=i' => \$num_iter, 'prev_m89res=s' => \$prev_m89res, 'sel_res_in=s' => \$prev_sel_res, 'sel_accs=s' => \$prev_sel_res, 'sel_file=s' => \$prev_sel_res, 'sel_file_in=s' => \$prev_sel_res, 'in_msa=s' => \$prev_msa, # 'out_msa=s' => \$next_msa, # 'in_hitdb=s' => \$prev_hitdb, # 'out_hitdb=s' => \$next_hitdb, 'in_pssm=s' => \$prev_pssm, # 'out_pssm=s' => \$next_pssm, 'prev_bounds=s' => \$prev_bound, 'out_bounds=s' => \$next_bound_out, 'num_iter|max_iter=i' => \$num_iter, 'dom|domain' => \$dom_flag, 'align' => \$align_flag, 'query_seed|query_mask' => \$query_mask, 'int_mask|int-mask|int_seed|int-seed=s' => \$int_mask, 'end_mask|end-mask|end_seed|end-seed=s' => \$end_mask, 'm_format=s' => \$m_format, 'pgm=s' => \$srch_pgm, 'quiet' => \$quiet, 'q' => \$quiet, 'silent' => \$quiet, 'h|?' => \$shelp, "help" => \$help, "errors" => \$error_log, "save_list:s" => \$tmp_file_list, # files to save (not delete) "save_tmp|save_all" => \$save_all, "del_bnd|delete_bnd" => \$delete_bnd, "del_tmp|del_all|delete_tmp|delete_all" => \$delete_tmp, ); pod2usage(1) if $shelp; pod2usage(exitstatus => 0, verbose => 2) if $help; pod2usage(1) unless $query_file && -r $query_file; # need a query pod2usage(1) unless $db_file ; # need a database my %sel_hits = (); my @del_file_ext = qw(msa psibl_out hit_db asntxt asnbin); if ($srch_pgm =~ m/psiblast/) { pop(@del_file_ext); } if ($query_mask) { $int_mask='query' unless $int_mask ne 'none'; $end_mask='query' unless $end_mask ne 'none'; } if (!$delete_tmp && $save_all) { @del_file_ext = (); $tmp_file_list = ""; $delete_bnd = 0 } ################ # which tmp files should be saved/deleted? # my %save_file_ext = (); if ($tmp_file_list) { my @new_del_file_ext = (); for my $ext (split(/,\s*/,$tmp_file_list)) { # possible values are: msa, asnbin, asntxt, psibl_out, hit_db (see @del_file_ext) $save_file_ext{$ext} = 1; } for my $ext (@del_file_ext) { push @new_del_file_ext, $ext unless $save_file_ext{$ext}; } @del_file_ext = @new_del_file_ext; } print "$pgm_command\n" unless ($quiet); #### # generate output filenames my ($query_pref) = ($query_file =~ m/([\w\.]+)$/); $file_out = $query_pref unless $file_out; my $this_file_pref = "$file_out.it$this_iter"; $this_file_pref = "$this_file_pref.$suffix" if ($suffix); my $this_file_out = $this_file_pref; $this_file_out = "$tmp_dir/$this_file_out" if ($tmp_dir); my $prev_file_out = ""; #### # do the first search or use $prev_m89res my $first_iter = 0; my $iter_val = $this_iter; my $search = ""; my @del_err_files = (); unless ($prev_m89res || $prev_msa) { $search = $srch_subs{$srch_pgm}($query_file, $db_file, $prev_pssm); unless ($use_stdout) { log_system("$search > $this_file_out 2> $this_file_out.err"); } else { log_system("$search 2> $this_file_out.err"); } push @del_err_files, "$this_file_out.err"; $first_iter++; } elsif ($prev_m89res) { $this_file_out = $prev_m89res; } elsif ($prev_msa) { # build a PSSM, do a search, up the iteration count $prev_pssm = pssm_from_msa($query_file, $prev_msa); $search = $srch_subs{$srch_pgm}($query_file, $db_file, $prev_pssm); unless ($use_stdout) { log_system("$search > $this_file_out 2> $this_file_out.err"); } else { log_system("$search 2> $this_file_out.err"); } push @del_err_files, "$this_file_out.err"; $first_iter++; } my ($this_pssm, $this_bound_out) = ("",""); # now have necessary files for next iteration for (my $it=$first_iter; $it < $num_iter; $it++) { #### # build the PSSM for the current search my ($this_pssm, $this_bound_out) = build_msa_pssm($query_file, $this_file_out, $prev_bound, $prev_sel_res, $m_format); $prev_file_out = $this_file_out; $prev_sel_res = ""; $iter_val = $this_iter + $it; #### # build filename for this iteration $this_file_pref = $this_file_out = "$file_out.it$iter_val"; $this_file_out = "$this_file_pref.$suffix" if ($suffix); $this_file_out = "$tmp_dir/$this_file_out" if ($tmp_dir); $search = $srch_subs{$srch_pgm}($query_file, $db_file, $this_pssm); unless ($use_stdout) { log_system("$search > $this_file_out 2> $this_file_out.err"); } else { log_system("$search 2> $this_file_out.err"); } push @del_err_files, "$this_file_out.err"; #### # here, we are done with previous .msa, .asntxt, .asnbin, etc files. Delete them if desired if (@del_file_ext) { my @del_file_list = (); for my $ext (@del_file_ext) { push @del_file_list, "$prev_file_out.$ext"; } log_system("rm ".join(" ",@del_file_list)); } log_system("rm $prev_bound") if ($delete_bnd); if (has_converged($prev_bound, $this_bound_out)) { print STDERR "$0 $srch_pgm $query_file $db_file converged ($iter_val iterations)\n" unless ($quiet); last; } $prev_bound = $this_bound_out } if (@del_err_files) { log_system("rm ".join(" ",@del_err_files)); } log_system("rm $prev_bound") if ($delete_bnd); unless ($quiet) { print STDERR "$0 $srch_pgm $query_file $db_file finished ($num_iter iterations)\n"; } ################ # log_system() # run system on string, logging first if $error_log # sub log_system { my ($cmd) = @_; print STDERR "# $cmd\n" if $error_log; system($cmd); } ################ # sub get_ssearch_cmd() # builds an ssearch command line with query, db, and pssm # sub get_ssearch_cmd { my ($query_file, $db_file, $pssm_file) = @_; my $mf_arg = $m_format; $mf_arg =~ s/^m//; $mf_arg =~ s/\+/ /; my $search_cmd = qq($ssearch_bin -S -E "$srch_evalue 0" -s BP62 -m $mf_arg); if ($annot_type) { $search_cmd .= qq( -V $annot_cmds{$annot_type}); } if ($pssm_file) { $search_cmd .= qq( -P "$pssm_file 2"); } $search_cmd .= qq( $query_file $db_file); return $search_cmd; } ################ # sub get_psiblast_cmd() # builds an ssearch command line with query, db, and pssm # sub get_psiblast_cmd { my ($query_file, $db_file, $pssm_file) = @_; my $search_cmd = qq($psiblast_bin -num_threads 8 -max_target_seqs 5000 -outfmt '7 qseqid sseqid pident length mismatch gapopen qstart qend sstart send evalue bitscore score btop' -inclusion_ethresh $pssm_evalue -evalue $srch_evalue -num_iterations 1 -db $db_file); if ($pssm_file) { $search_cmd .= qq( -in_pssm $pssm_file); # $search_cmd .= qq( -comp_based_stats 0); } else { $search_cmd .= qq( -query $query_file); } return $search_cmd; } ################ # sub build_msa_pssm() # # given query, search output file ($this_file_out), prev_boundary_file # uses m89_btop_msa2.pl to generate PSSM in .asntxt or .asnbin format, also bound_file_out if $align_flag # (later - optionally deletes intermediate files) # # always produce a $bound_file_out file to test for convergence # sub build_msa_pssm { my ($query_file, $this_file_out,$prev_bound_in, $prev_sel_in, $m_format) = @_; my ($this_msa, $this_hit_db, $this_pssm_asntxt, $this_pssm_asnbin, $this_psibl_out, $this_bound_out) = ("$this_file_out.msa", "$this_file_out.hit_db", "$this_file_out.asntxt", "$this_file_out.asnbin", "$this_file_out.psibl_out", "$this_file_out.bnd_out", ); my $blastdb_err = "$this_file_out.mkbldb_err"; my $aln2msa_cmd = qq($align2msa_lib --query $query_file --masked_lib_out=$this_hit_db); if ($m_format) { $aln2msa_cmd .= qq( --m_format $m_format); } if ($prev_sel_in) { $aln2msa_cmd .= qq( --sel_file_in $prev_sel_in); } else { $aln2msa_cmd .= qq( --evalue $pssm_evalue); } if ($int_mask) { $aln2msa_cmd .= qq( --int_mask_type $int_mask); } if ($end_mask) { $aln2msa_cmd .= qq( --end_mask_type $end_mask); } if ($dom_flag) { $aln2msa_cmd .= qq( --domain); } if ($align_flag && $prev_bound_in) { $aln2msa_cmd .= qq( --bound_file_in $prev_bound_in); } # always produce this file to check for convergence $aln2msa_cmd .= qq( --bound_file_out $this_bound_out); log_system("$aln2msa_cmd $this_file_out > $this_msa"); my $makeblastdb_cmd = "$makeblastdb_bin -in $this_hit_db -dbtype prot -parse_seqids > $blastdb_err"; log_system($makeblastdb_cmd); my $buildpssm_cmd = "$psiblast_bin -max_target_seqs 5000 -outfmt 7 -inclusion_ethresh 100.0 -in_msa $this_msa -db $this_hit_db -out_pssm $this_pssm_asntxt -num_iterations 1 -save_pssm_after_last_round"; log_system("$buildpssm_cmd > $this_psibl_out 2> $this_psibl_out.err"); log_system("rm $this_hit_db.p* $blastdb_err") unless $error_log; # remove uninformative error logs log_system("rm $this_psibl_out.err") unless $error_log; unless ($srch_pgm eq 'psiblast') { my $asn2asn_cmd = "$datatool_bin -v $this_pssm_asntxt -e $this_pssm_asnbin"; log_system($asn2asn_cmd); return ($this_pssm_asnbin, $this_bound_out); } else { return ($this_pssm_asntxt, $this_bound_out); } } ################ # pssm_from_msa() # # given query, --in_msa Clustal MSA # use psiblast to generate PSSM in .asntxt or .asnbin format # (later - optionally deletes intermediate files) # # always produce a $bound_file_out file to test for convergence # sub pssm_from_msa { my ($query_file, $msa_file) = @_; my $this_file_out = $query_file; my ($this_hit_db, $this_pssm_asntxt, $this_pssm_asnbin, $this_psibl_out, $this_bound_out) = ("$this_file_out.hit_db", "$this_file_out.asntxt", "$this_file_out.asnbin", "$this_file_out.psibl_out", "$this_file_out.bnd_out", ); my $blastdb_err = "$this_file_out.mkbldb_err"; ## should not need this, but may need to convert in_msa file to fasta file for equivalence to build_msa_pssm() my $clus2fa_cmd = qq($clustal2fasta $msa_file > $this_hit_db); log_system($clus2fa_cmd); my $makeblastdb_cmd = "$makeblastdb_bin -in $this_hit_db -dbtype prot -parse_seqids > $blastdb_err"; log_system($makeblastdb_cmd); my $buildpssm_cmd = "$psiblast_bin -max_target_seqs 5000 -outfmt 7 -inclusion_ethresh 100.0 -in_msa $msa_file -db $this_hit_db -out_pssm $this_pssm_asntxt -num_iterations 1 -save_pssm_after_last_round"; log_system("$buildpssm_cmd > $this_psibl_out 2> $this_psibl_out.err"); log_system("rm $this_hit_db.p* $blastdb_err") unless $error_log; # remove uninformative error logs log_system("rm $this_psibl_out.err") unless $error_log; unless ($srch_pgm eq 'psiblast') { my $asn2asn_cmd = "$datatool_bin -v $this_pssm_asntxt -e $this_pssm_asnbin"; log_system($asn2asn_cmd); return ($this_pssm_asnbin); } else { return ($this_pssm_asntxt); } } ################ # sub has_converged() # reads two boundary files and compares accessions # sub has_converged { my ($file1, $file2) = @_; return 0 unless ($file1 && $file2); my @f1_names = (); my @f2_names = (); open (my $fd1, '<', $file1) || die "cannot read $file1"; while (my $line = <$fd1>) { chomp($line); my @fields = split(/\t/,$line); push @f1_names, $fields[0]; } close $fd1; open (my $fd2, '<', $file2) || die "cannot read $file2"; while (my $line = <$fd2>) { chomp($line); my @fields = split(/\t/,$line); push @f2_names, $fields[0]; } close $fd2; # check for same length return 0 if (scalar(@f1_names) != scalar(@f2_names)); @f1_names = sort @f1_names; @f2_names = sort @f2_names; for (my $i=0; $i < scalar(@f1_names); $i++) { return 0 if ($f1_names[$i] ne $f2_names[$i]); } return 1; } __END__ =pod =head1 NAME psisearch2_msa.pl =head1 SYNOPSIS psisearch2_msa.pl --query q_file --db db_file --pgm ssearch|psiblast --num_iter 5 =head1 OPTIONS -h short help --help include description --query query file (also --sequence) --db database file (--database) --pgm [ssearch] program used for searching, ssearch or psiblast --num_iter/iter [5] maximum number of iterations (--max_iter) --this_iter [0] iteration number for tracking --pssm_evalue [0.002] threshold for inclusion in PSSM --search_evalue [5.0] threshold for inclusion in search display --annot_db [null] (rpd3, rpd3nv, rpd3nvn, pfam) --dir working directory and location of output --out_name/--suffix result file is "out_name.it#.suffix" --in_msa/--out_msa [not implemented] MSA used to build PSSM, requires --in_hitdb --in_hitdb/--out_hitdb [not implemented] used to build PSSM --in_pssm/--out_pssm [--out_pssm not implemented] --in_bounds/--out_bounds used to control alignment boundaries for PSSM --int_mask/--end_mask none|query|random - values embeeded in library sequences based on gaps in MSA --delete_all remove all tmp files (also --delete_tmp, --del_all, --del_tmp) --delete_bnd remove boundary file (included with --delete_all, but not deleted by default) --save_all save temporary files (.asnbin, .asntxt, .msa, .psiblout, .hit_db) --save_list: comma delimited list of file extensions (above) to save =head1 DESCRIPTION C can perform one, or multiple, successive iterations of C or C using different query seeding strategies to reduce PSSM contamination from alignment over-extension. C uses the C program to read BTOP formatted output from C or C and produce both a multiple sequence alignment (MSA) and a fasta formatted custom database of the sequences in the MSA. C then produces a PSSM From the MSA and custom database. Different strategies to reduce PSSM contamination from alignment overextension can be specified using the C<--int_mask>, C<--end_mask>, C<--align>, and C<--domain> options. If C<--int_mask> and C<--end_mask> are not specified (or set to "none"), then the PSSM is generated by aligning the MSA with the sequence residues that were aligned in the previous search. C<--int_mask> and C<--int_mask> are set to "query", then any gaps in the MSA are filled with the corresponding aligned residue from the query sequence. In our experience, this dramatically reduces alignment over-extension and false-positives. =head1 AUTHORS William R. Pearson (wrp@virginia.edu) and Weizhong Li (wli@ebi.ac.uk) =cut fasta36-36.3.8i_14-Nov-2020/psisearch2/psisearch2_msa.py000077500000000000000000000407421433453312700222170ustar00rootroot00000000000000#!/usr/bin/env python ################################################################ # copyright (c) 2016 by William R. Pearson and The Rector & # Visitors of the University of Virginia */ ################################################################ # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under this License is distributed on an "AS # IS" BASIS, WITHOUT WRRANTIES OR CONDITIONS OF ANY KIND, either # express or implied. See the License for the specific language # governing permissions and limitations under the License. ################################################################ import sys import os import argparse import subprocess import re # python re-write of psisearch2_msa.pl # # logic: # (1) do initial search # (2) use results of initial search to produce MSA/PSSM for next search # (3) do PSSM search # (4) use results of PSSM search to produce MSA/PSSM for iterative step 3 # ################ # # command: # psisearch2_msa.py --query query_file --db database --num_iter N --pssm_evalue 0.002 --no_msa --int_mask none/query/random --end_mask none/query/random --tmp_dir results/ --domain --align --suffix M8CB --pgm ssearch/psiblast --prev_m89res pre_iter.out --this_iter # --num_iter # # ################ ################ # locations of required programs: # (1) m89_btop_msa2.pl # (2) ssearch # (3) NCBI blast+ programs: psiblast/makeblastdb # (4) NCBI datatool (required only for ssearch36 PSSMs) pgm_bin = "/seqprg/bin" pgm_data = "/seqprg/data" ssearch_bin = pgm_bin+"/ssearch36" psiblast_bin = pgm_bin+"/psiblast" makeblastdb_bin = pgm_bin+"/makeblastdb" datatool_bin = "%s/datatool -m %s/NCBI_all.asn" % (pgm_bin,pgm_data) align2msa_lib = "m89_btop_msa2.pl" clustal2fasta = "clustal2fasta.py" annot_cmds = {'rpd3': '"!../scripts/ann_pfam28.pl --pfacc --db RPD3 --vdoms --split_over"', 'rpd3nv':'"!../scripts/ann_pfam28.pl --pfacc --db RPD3 --split_over"', 'pfam':'"!../scripts/ann_pfam30.pl --pfacc --vdoms --split_over"'} num_iter = 5 srch_pgm = 'ssearch' rm_flag = 0 quiet = 0 ################ # log_system() # run system on string, logging first if args.error_log # def log_system (cmd, error_log): if (error_log) : sys.stderr.write(cmd+"\n") subprocess.call(cmd, shell=True) # print cmd ################ # sub get_ssearch_cmd() # builds an ssearch command line with query, db, and pssm # def get_ssearch_cmd(query_file, db_file, pssm_file, args) : search_cmd = '%s -S -m 8CB -d 0 -E "%f 0" -s BP62' % (ssearch_bin, args.srch_evalue) if (args.annot_type) : search_cmd += " -V %s" % (annot_cmds[args.annot_type]) if (pssm_file) : search_cmd += ' -P "%s 2"' % (pssm_file) search_cmd += " %s %s" % (query_file, db_file) return search_cmd ################ # sub get_psiblast_cmd() # builds an ssearch command line with query, db, and pssm # def get_psiblast_cmd(query_file, db_file, pssm_file, args) : search_cmd = "%s -num_threads 4 -max_target_seqs 5000 -outfmt '7 qseqid sseqid pident length mismatch gapopen qstart qend sstart send evalue bitscore score btop' -inclusion_ethresh %f -evalue %f -num_iterations 1 -db %s" % (psiblast_bin, args.pssm_evalue, args.srch_evalue, db_file) if (pssm_file) : search_cmd += " -in_pssm %s" % (pssm_file) else : search_cmd += " -query %s" % (query_file) return search_cmd ################ # sub build_msa_pssm() # # given query, search output file (this_file_out), prev_boundary_file # uses m89_btop_msa2.pl to generate PSSM in .asntxt or .asnbin format, also bound_file_out if align_flag # (later - optionally deletes intermediate files) # # always produce a bound_file_out file to test for convergence # def build_msa_pssm(query_file, this_file_out,prev_bound_in, prev_sel_res, error_log) : (this_msa, this_hit_db, this_pssm_asntxt, this_pssm_asnbin, this_psibl_out, this_bound_out) = (this_file_out+".msa",this_file_out+".hit_db",this_file_out+".asntxt",this_file_out+".asnbin",this_file_out+".psibl_out",this_file_out+".bnd_out") blastdb_err = this_file_out+".mkbldb_err" aln2msa_cmd = "%s --query %s --masked_lib_out=%s" % (align2msa_lib, query_file, this_hit_db) if (prev_sel_res) : aln2msa_cmd += " --sel_res %s" % (prev_sel_res) else: aln2msa_cmd += " --evalue %f" % (args.pssm_evalue) if (args.int_mask) : aln2msa_cmd += " --int_mask_type %s" % (args.int_mask) if (args.end_mask) : aln2msa_cmd += " --end_mask_type %s" % (args.end_mask) if (args.dom_flag) : aln2msa_cmd += " --domain" if (args.align_flag and args.prev_bound_in) : aln2msa_cmd += " --bound_file_in %s" %(args.prev_bound_in) if (args.m_format): aln2msa_cmd += " --m_format %s" % (args.m_format) # always produce this file to check for convergence aln2msa_cmd += " --bound_file_out %s" % (this_bound_out) log_system("%s %s > %s"%(aln2msa_cmd, this_file_out, this_msa), error_log) makeblastdb_cmd = "%s -in %s -dbtype prot -parse_seqids > %s" % (makeblastdb_bin, this_hit_db, blastdb_err) log_system(makeblastdb_cmd, error_log) buildpssm_cmd = "%s -max_target_seqs 5000 -outfmt 7 -inclusion_ethresh 100.0 -in_msa %s -db %s -out_pssm %s -num_iterations 1 -save_pssm_after_last_round" % (psiblast_bin, this_msa, this_hit_db, this_pssm_asntxt) log_system("%s > %s 2> %s.err" % (buildpssm_cmd, this_psibl_out, this_psibl_out), error_log) log_system("rm %s.p* %s" % (this_hit_db,blastdb_err), error_log) # remove uninformative error logs if (not error_log) : log_system("rm "+this_psibl_out+".err ",error_log) if (srch_pgm != 'psiblast') : asn2asn_cmd = "%s -v %s -e %s" % (datatool_bin, this_pssm_asntxt, this_pssm_asnbin) log_system(asn2asn_cmd, error_log) return (this_pssm_asnbin, this_bound_out) else : return (this_pssm_asntxt, this_bound_out) ################ # sub pssm_from_msa # read multiple sequence alignment, produce pssm file # def pssm_from_msa(query_file, msa_file, error_log): this_file_out = query_file this_hit_db = this_file_out+".hit_db" this_pssm_asntxt = this_file_out+".asntxt" this_pssm_asnbin = this_file_out+".asnbin" this_psibl_out = this_file_out+".psibl_out" this_bound_out = this_file_out+".bnd_out" blastdb_err = this_file_out + ".mkbldb_err" clus2fa_cmd = "%s %s > %s" % (clustal2fasta, msa_file, this_hit_db) log_system(clus2fa_cmd, error_log); makeblastdb_cmd = "%s -in %s -dbtype prot -parse_seqids > %s" % (makeblastdb_bin, this_hit_db, blastdb_err); log_system(makeblastdb_cmd, error_log); built_pssm_cmd = "%s -max_target_seqs 5000 -outfmt 7 -inclusion_ethresh 100.0 -in_msa %s -db %s -out_pssm %s -num_iterations 1 -save_pssm_after_last_round" % (psiblast_bin, msa_file, this_hit_db, this_pssm_asntxt) log_system("%s > %s 2> %s.err" % (buildpssm_cmd, this_psibl_out, this_psibl_out), error_log) log_system("rm %s.p* %s" % (this_hit_db,blastdb_err), error_log) # remove uninformative error logs if (not error_log): log_system("rm %s.err" % (this_psibl_out), error_log) if (srch_pgm != 'psiblast'): asn2asn_cmd = "%s -v %s -e %s" % (datatool_bin, this_pssm_asntxt, this_pssm_asnbin) log_system(asn2asn_cmd, error_log); return this_pssm_asnbin else: return this_pssm_asntxt ################ # sub has_converged() # reads two boundary files and compares accessions # def has_converged(file1, file2) : if (not file1 or not file2): return 0 f1_names = [] f2_names = [] with open(file1) as fd: for line in fd: line = line.rstrip('\n') fields = line.split('\t') f1_names.append(fields[0]) with open(file2) as fd: for line in fd: line = line.rstrip('\n') fields = line.split('\t') f2_names.append(fields[0]) # check for same length if (len(f1_names) != len(f2_names)) : return 0 f1_names.sort() f2_names.sort() for i,v in enumerate(f1_names) : if (f2_names[i] != v) : return 0 return 1 # main() srch_subs = {'ssearch' : get_ssearch_cmd, 'psiblast': get_psiblast_cmd} arg_parse = argparse.ArgumentParser(description='Iterative search with SSEARCH/PSIBLAST') arg_parse.add_argument('--query', dest='query_file', action='store',help='query sequence file') arg_parse.add_argument('--sequence', dest='query_file', action='store',help='query sequence file') arg_parse.add_argument('--db', dest='db_file', action='store',help='sequence database name') arg_parse.add_argument('--database', dest='db_file', action='store',help='sequence database name') arg_parse.add_argument('--dir', dest='tmp_dir', action='store',help='directory for result and tmp_file output') arg_parse.add_argument('--pssm_evalue', dest='pssm_evalue', default=0.002, type=float, action='store',help='E()-value threshold for inclusion in PSSM') arg_parse.add_argument('--search_evalue', dest='srch_evalue', default=5.0, type=float, action='store',help='E()-value threshold for search display') arg_parse.add_argument('--m_format', dest='m_format', action='store',help='input result format m8 [def] or m9') arg_parse.add_argument('--annot_db', dest='annot_type', action='store',help='source of domain annotations') arg_parse.add_argument('--suffix', dest='suffix', action='store',help='suffix for result output') arg_parse.add_argument('--out_name', dest='file_out', action='store',help='result file name') arg_parse.add_argument('--num_iter', dest='num_iter', default=5, type=int, action='store',help='number of iterations to run') arg_parse.add_argument('--in_pssm', dest='prev_pssm', action='store',help='initial PSSM') arg_parse.add_argument('--in_bounds', dest='prev_bound_in', type=str, action='store',help='initial boundaries') arg_parse.add_argument('--domain', dest='dom_flag', action='store_true',help='use domain annotations') arg_parse.add_argument('--align', dest='align_flag', default=0, action='store_true',help='use alignment boundaries') arg_parse.add_argument('--pgm', dest='srch_pgm', action='store',default='ssearch',help='search program: ssearch/psiblast') arg_parse.add_argument('--query_seed', dest='query_mask', action='store_true',help='use query seeding') arg_parse.add_argument('--prev_m89res', dest='prev_m89res', action='store', help='prevous iteration result') arg_parse.add_argument('--prev_msa', dest='prev_msa', action='store', help='prevous MSA') arg_parse.add_argument('--sel_res', dest='prev_sel_res', action='store', help='selected accession file') arg_parse.add_argument('--this_iter', dest='this_iter', help='this iteration number',type=int) arg_parse.add_argument('--int_seed', dest='int_mask', action='store',default='none',help='sequence masking: none/query/random') arg_parse.add_argument('--end_seed', dest='end_mask', action='store',default='none',help='sequence masking: none/query/random') arg_parse.add_argument('--int_mask', dest='int_mask', action='store',default='none',help='sequence masking: none/query/random') arg_parse.add_argument('--end_mask', dest='end_mask', action='store',default='none',help='sequence masking: none/query/random') arg_parse.add_argument('--save_list', dest='tmp_file_list', action='store',help='temporary extensions saved') arg_parse.add_argument('--save_all', dest='save_all', action='store_true',help='save all temporary files') arg_parse.add_argument('--delete_all', dest='delete_tmp', action='store_true',help='delete all temporary files') arg_parse.add_argument('--delete_bnd', dest='delete_bnd', action='store_true',help='delete boundary temporary file') arg_parse.add_argument('--use_stdout', dest='use_stdout', action='store_true',help='send results to stdout',default=False) arg_parse.add_argument('--errors', dest='error_log', action='store_true', help='log errors', default=False) arg_parse.add_argument('--quiet', dest='quiet', action='store_true',help='fewer messages') arg_parse.add_argument('-Q', dest='quiet', action='store_true',help='fewer messages') args = arg_parse.parse_args() pgm_command = "# "+" ".join(sys.argv); if (args.error_log) : sys.stderr.write('pgm_command\n') if (args.quiet) : quiet = args.quiet if (args.srch_pgm) : srch_pgm = args.srch_pgm if (not quiet) : print(pgm_command) del_file_ext = ["msa","psibl_out","hit_db","asntxt","asnbin"] if (re.match('psiblast',srch_pgm)) : del_file_ext.pop() if (args.query_mask) : if (args.int_mask == 'none') : args.int_mask = 'query' if (args.end_mask == 'none') : args.end_mask = 'query' this_iter = 1 if (args.this_iter): this_iter = args.this_iter delete_bnd = args.delete_bnd if (args.delete_tmp) : delete_bnd = 1 elif (args.save_all) : delete_file_ext = () args.tmp_file_list = '' delete_bnd = 0 save_file_ext = {} if (args.tmp_file_list) : new_del_file_ext = [] for ext in re.split(",\s*",args.tmp_file_list) : save_file_ext[ext] = 1 for ext in del_file_ext : if (not (ext in save_file_ext)): new_del_file_ext.append(ext) del_file_ext = new_del_file_ext[:] query_pref = query_file = args.query_file m = re.search(r'([\w\.]+)$',str(args.query_file)) query_pref = m.groups()[0] if (not args.file_out) : file_out = query_pref else : file_out = args.file_out this_file_out = this_file_pref = file_out+".it"+str(this_iter) if (args.suffix) : this_file_out = this_file_pref+"."+args.suffix if (args.tmp_dir) : this_file_out = args.tmp_dir+"/"+this_file_out prev_bound_in = '' if (args.prev_bound_in): prev_bound_in = args.prev_bound_in #### # parse output to build PSSM # generate output filenames first_iter = 0 del_err_files = [] # do the first search if (not (args.prev_m89res or args.prev_msa)): search_str = srch_subs[srch_pgm](args.query_file, args.db_file, args.prev_pssm, args) if (not args.use_stdout): log_system(search_str+" > "+this_file_out+" 2> "+this_file_out+".err", args.error_log) else: log_system(search_str + " 2> "+this_file_out+".err", args.error_log) del_err_files.append(this_file_out+".err") first_iter += 1 elif (args.prev_m89res): this_file_out = args.prev_m89res elif (args.prev_msa): # build a PSSM, do a search, up the iteration count prev_pssm = pssm_from_msa(query_file, prev_msa, args.error_log) search_str = srch_subs[srch_pgm](args.query_file, args.db_file, args.prev_pssm, args) if (not args.use_stdout): log_system(search_str + "> " + this_file_out + " 2> " + this_file_out + ".err", args.error_log); else: log_system(search_str + " 2> " + this_file_out + ".err"); del_err_files.append(this_file_out+".err") first_iter += 1 it=first_iter # now have necessary files for next iteration while (it < args.num_iter) : (this_pssm, this_bound_out) = build_msa_pssm(args.query_file, this_file_out, prev_bound_in, args.prev_sel_res, args.error_log) prev_file_out = this_file_out args.prev_sel_res = '' iter_val = this_iter + it prev_pssm = this_pssm #### # build filename for this iteration this_file_out = this_file_pref = "%s.it%d" % (file_out,iter_val) if (args.suffix) : this_file_out = this_file_pref+"."+args.suffix if (args.tmp_dir) : this_file_out = args.tmp_dir+"/"+this_file_out search_str = srch_subs[srch_pgm](args.query_file, args.db_file, prev_pssm, args) log_system("%s > %s 2> %s" % (search_str,this_file_out,this_file_out+".err"), args.error_log) del_err_files.append(this_file_out+".err") if (len(del_file_ext)): del_file_list = [ prev_file_out+'.'+ext for ext in del_file_ext] log_system('rm '+' '.join(del_file_list),args.error_log) if (has_converged(prev_bound_in, this_bound_out)) : if (not quiet) : sys.stderr.write(" %s %s %s %s converged (%d iterations)\n" % (sys.argv[0], srch_pgm, query_file, args.db_file, it)) # if (len(del_file_ext)): # del_file_list = [ prev_file_out+'.'+ext for ext in del_file_ext] # log_system('rm '+' '.join(del_file_list),args.error_log) if (delete_bnd) : log_system("rm "+prev_bound_in,args.error_log) exit(0) if (delete_bnd) : log_system("rm "+prev_bound_in,args.error_log) prev_bound_in = this_bound_out it += 1 if (len(del_err_files)): log_system('rm '+' '.join(del_err_files),args.error_log) # if (len(del_file_ext)): # del_file_list = [ prev_file_out+'.'+ext for ext in del_file_ext] # log_system('rm '+' '.join(del_file_list),args.error_log) if (delete_bnd): log_system("rm "+this_bound_out,args.error_log) if (not quiet) : sys.stderr.write(" %s %s %s %s finished (%d iterations)\n" % (sys.argv[0], srch_pgm, query_file, args.db_file, it)) fasta36-36.3.8i_14-Nov-2020/psisearch2/psisearch2_msa_iter.sh000077500000000000000000000016251433453312700232210ustar00rootroot00000000000000#!/bin/sh ################ # example that runs psisearch2_msa.pl iteratively through 5 iterations. # Equivalent to: # psisearch2_msa.pl --query CL0238_emb.fa --num_iter 5 --db /slib2/fa_dbs/rpd3_pfam28_lib.lseg # PS_BIN=~/Devel/fa36_v3.8/psisearch2 Q_DIR="../seq" FA_DB=/slib2/fa_dbs/qfo78.lseg BL_DB=/slib2/bl_dbs/qfo78 DB=$FA_DB OUT_SUFF='qm8CB' M_FORMAT='m8CB' ITERS='2 3 4 5' for q_file_p in $*; do q_file=${q_file_p##*/} echo $q_file # iteration 1: $PS_BIN/psisearch2_msa.pl --query $Q_DIR/$q_file --num_iter 1 --db $DB --int_mask query --end_mask query --out_suffix $OUT_SUFF --m_format $M_FORMAT # iteration 2 - 5 for it in $ITERS; do prev=$(($it-1)) $PS_BIN/psisearch2_msa.pl --query $Q_DIR/$q_file --num_iter 1 --db $DB --int_mask query --end_mask query --out_suffix $OUT_SUFF --this_iter $it --prev_m89res $q_file.it${prev}.$OUT_SUFF --m_format $M_FORMAT done done fasta36-36.3.8i_14-Nov-2020/psisearch2/psisearch2_msa_iter_bl.sh000077500000000000000000000023041433453312700236710ustar00rootroot00000000000000#!/bin/sh ################ # example that runs psisearch2_msa.pl iteratively through 5 iterations using psiblast instead of ssearch # Equivalent to: # psisearch2_msa.pl --pgm psiblast --query query.aa --num_iter 5 --db /slib2/bl_dbs/qfo78 # PS_BIN=~/Devel/fa36_v3.8/psisearch2 q_file=$1 db=/slib2/bl_dbs/pir1 pssm_eval=1e-10 m_format='m8CB' SRC_QDIR=../hum_1dom200_queries iters='2 3 4 5' # iters='' for q_file_p in $*; do q_file=${q_file_p##*/} echo $q_file # iteration 1: # echo "$PS_BIN/psisearch2_msa.pl --pgm psiblast --query $SRC_QDIR/$q_file --num_iter 1 --db $db --int_mask query --end_mask query --out_suffix q_pblt --m_format $m_format --save_list asnbin" $PS_BIN/psisearch2_msa.pl --pgm psiblast --query $q_file --num_iter 1 --pssm_eval $pssm_eval --db $db --int_mask query --end_mask query --out_suffix q_pblt --m_format $m_format --save_list asntxt # iteration 2 - 5 for it in $iters; do prev=$(($it-1)) $PS_BIN/psisearch2_msa.pl --pgm psiblast --query $q_file --num_iter 1 --pssm_eval $pssm_eval --db $db --int_mask query --end_mask query --out_suffix q_pblt --this_iter $it --prev_m89res $q_file.it${prev}.q_pblt --m_format $m_format --save_list asntxt done done fasta36-36.3.8i_14-Nov-2020/scripts/000077500000000000000000000000001433453312700163545ustar00rootroot00000000000000fasta36-36.3.8i_14-Nov-2020/scripts/README000066400000000000000000000132351433453312700172400ustar00rootroot00000000000000 22-Jan-2014 13-Apr-2016 updated 22-Feb-2019 updated fasta36/scripts Perl scripts for annotating sequences and expanding libraries -- Sequence generation (January, February, 2019) The FASTA programs can now use sequences that are downloaded from Uniprot or NCBI/RefSeq (or otherwise provided by a program script that produces FASTA sequences from an identifier) by specifying the name of the script, the accession(s), and library type 9, e.g. fasta36 \!../scripts/get_protein.py+P09488 /seqlib/swissprot.fasta Scripts are available for downloading protein sequences from Uniprot or RefSeq (get_protein.py), Uniprot (get_uniprot.py), and for downloading either protein or mRNA sequences from RefSeq (get_refseq.py). scripts/get_protein.py get Refseq or Uniprot proteins scripts/get_refseq.py get RefSeq proteins or mRNAs scripts/get_up_prot_iso_sql.py get a protein and its isoforms using a mysql database scripts/get_genome_seq.py get human genome (hg38) or mouse (mm10) --genome mm10 sequences using bedtools using "get_genome_seq.py chr1:123456-126543" -- Sequence alignment scoring/annotation Two program scripts -- annot_blast_btop2.pl and blastp_cmd.sh -- have been added to support sub-alignment scoring of BLASTP alignments. annot_blast_btop2.pl takes three inputs: (1) a query sequence file; (2) a domain annotation script (see below), and (3) a BLAST tabular format output with two additional fields, "score" and "btop": annot_blast_btop2.pl --query query.file --ann_script ann_pfam_www.pl blast_tab_btop_file The blast_tab_btop_file can be produced using the blastp_cmd.sh shell script, which uses ASN.1 output and blast_formatter to produce both a standard alignment file and the modified blast tabular btop file. -- Implied Multiple sequence alignment -- As part of a strategy to improve PSSM-based similarity searching, two scripts that use a BTOP encoded alignment string from either -m 8CB or -m 9B output files to produce a Clustal-like multiple sequence alignment (MSA) that can be used as input to psiblast to produce an ASN.1 text file (which can be converted with datatool to ASN.1 binary, which can be read by ssearch36 -P "file.asn1 2"). We used the BTOP encoding, rather than the more common CIGAR string (-m 9C), or the older alignment encoding (-m 9c), because the BTOP encoding only requires the query sequence to reproduce both the query and subject aligned residues. Thus: m8_btop_msa.pl --query gstt1_drome.aa gstt1_sp.bl_btop > gstt1_sp.ss_msa where "gstt1_sp.bl_btop" is "-m 8CB" output, produces: ==== SSEARCHm8 multiple sequence alignment sp|P20432|GSTT1_DROME MVDFYYLPGSSPCRSVIMTAKAVGVELNKKLLNLQAGEHLKPEFLKINPQHTIPTLVDNG sp|P04907|GSTF3_MAIZE ---LYGMPLSPNVVRVATVLNEKGLDFEIVPVDLTTGAHKQPDFLALNPFGQIPALVDGD sp|P12653|GSTF1_MAIZE -------------------------------INFATAEHKSPEHLVRNPFGQVPALQDGD sp|P0ACA5|SSPA_ECO57 ------------------------------------------DLIDLNPNQSVPTLVDRE sp|P00502|GSTA1_RAT VLHYFNARGRMECIRWLLA--AAGVEFDEKFI--QSPEDL--EKLKKDGNDQVPMVEIDG ... ==== which can be used with psiblast -in_msa gstt1_sp.ss_msa. m9B_btop_msa.pl does the same for "-m 9B" output. -- Domain annotation -- (Nov. 2015) These domain annotation scripts allow overlapping domains, and must be used with versions of the FASTA programs that support the current "start - stop domain_description" format (in contrast to the older format which put domain starts and stops on separate lines with '[' and ']'). Until this release, the "overlapping" domain scripts had '_e' in their name, e.g. ann_pfam28_e.pl. The "_e" scripts have been renamed, losing the '_e', and the old non-'_e' scripts have been removed from the distribuition. All of the "ann_*.pl" scripts are used to annotate query or library sequences using the -V option. See ../test/test2V.pl for examples. ann_feats2ipr.pl -- generate Uniprot sites, Interpro domains, from a mySQL database ann_feats2l.pl -- generate Uniprot sites, domains from a mySQL database ann_feats_up_www2.pl -- generate Uniprot sites, domains from an EBI web server that converts Uniprot DAS to gff3. ann_feats_up_www.pl -- generate Uniprot sites, domains from a Uniprot gff web server (less information than ann_feats_www2.pl) ann_ipr_www.pl -- Interpro domains from Interpro WWW site. ann_pdb_cath.pl -- generate CATH domains using PDB accessions from a mySQL database ann_pdb_vast.pl -- use VAST domains, but domain names are not informative ann_pfam28.pl -- generate Pfam domains using local Pfam mySQL database (Pfam28, no auto_pfamA, auto_pfamseq) ann_pfam_www.pl -- use Pfam Website, and XML::Twig, to get Pfam domain info. ann_exons_up_www.pl -- generate exon boundaries on Uniprot proteins using the EBI/Proteins/API/coordinate service ann_exons_up_sql_www.pl -- generate exon boundaries on Uniprot proteins using an SQL database (if available) or the EBI/Proteins coordinate service. The SQL results are dramatically faster. ann_exons_ncbi.pl -- generate exon boundaries on NCBI refseq proteins. -- Library expansion expand_up_isoforms.pl -- for Uniprot reference proteomes, provide isoforms for each canonical sequence. expand_uniref50.pl -- allows search of uniref50 to be expanded expand_links.pl -- script to take hits from a smaller library and expand to complete library links2sql.pl -- create links for expand_links.pl exp_up_ensg.pl -- expand uniprot sequences to include Ensembl splice variants -- Plot local alignments (.lav files) lav2plt.pl -- used to produce postscript or svg plots of "lalign36 -m 11" lav output files color_defs.pl -- used by lav2plt.pl to produce domain colors lavplt_ps.pl -- used by lav2plt.pl --dev ps lavplt_svg.pl -- used by lav2plt.pl --dev svg fasta36-36.3.8i_14-Nov-2020/scripts/README.scripts000066400000000000000000000061561433453312700207320ustar00rootroot00000000000000 $Id: README.scripts 1258 2014-05-02 13:27:07Z wrp $ $Revision: 1258 $ May 13, 2013 This directory contains a variety of scripts that work with the two scripting options for the FASTA programs: -e expand_script.pl and -V \!annotate_script.pl All these scripts use a mysql database that provides a mapping between the sequence identifiers provided by the sequence library and the additional sequences (-e) or annotations (-V) that are generated. Thus, the scripts will NOT work as written because they reference mysql databases that are only available inside the University of Virginia. Scripts for sequence library expansion: expand_uniref50.pl -- produces new sequences from the Uniref50 mapping of Uniref50 to Uniprot. expand_links.pl -- produce new sequences from a custom-built database of protein links links2sql.pl -- build the file of protein accessions to linked accessions exp_up_ensg.pl -- (human sequences only) use the ENSEMBL to Uniprot mapping to extract alternative splice isoforms. The expansion scripts expect a file name for a file that contains: sp|P09488|GSTM11e-100 ... The file is then opened, read, and the accessions extracted and used to find the linked sequences. ================ Scripts for library annotation: The annotation scripts are very similar to the expansion scripts, but have the option of either (1) taking the name of a file sequence annotations, e.g. annot_script.pl annot_file or (2) taking an argument that is a single sequence identifier: annot_script.pl 'sp|P09488|GSTM1_HUMAN' ('|' must be escaped for many shells) Three annotation scripts are available: ann_feats2l.pl - get features and domains from local Uniprot database ann_feats2ipr.pl -- get features from Uniprot and domains from a local Uniprot/Interpro database ann_pfam.pl -- get domains (only) from local copy of Pfam SQL database ann_pfam_www.pl -- get domains (only) from Pfam web services ann_feats_up_www.pl -- get features/domains from Uniprot gff3 server (http://www.uniprot.org/uniprot/P0948.gff) The Uniprot gff service does not provide information on the actual sequence changes associated with mutants and variants: P09488 UniProtKB Natural variant 210 210 . . . ID=VAR_014497;Dbxref=dbSNP:rs449856 P09488 UniProtKB Mutagenesis 7 7 . . . Note=Reduces catalytic activity 100-fold. However, the Uniprot XML service does provide this information, so a second resource: ann_feats_up_www2.pl -- get features/domains from EMBL/EBI XSLT conversion of Uniprot XML: http://www.ebi.ac.uk/Tools/dbfetch/dbfetch/uniprotkb/P09488/gff2 Provides substitution information, as well as links to references: P09488 UniProtKB natural_variant_site 210 210 . . . Note "S -> T" ; Note "UniProtKB FT ID: VAR_014497" ; Note "dbSNP:rs449856" ; Link "http://www.ensembl.org/Homo_sapiens/Variation/Explore?v=rs449856" ; Link "http://www.ncbi.nlm.nih.gov/SNP/snp_ref.cgi?type=rs&rs=449856" P09488 UniProtKB mutated_variant_site 7 7 . . . Note "Y -> F" ; Note "Reduces catalytic activity 100- fold" ; Link "http://www.ncbi.nlm.nih.gov/pubmed/16548513" All the annotation scripts offer -h and --help options. ================ fasta36-36.3.8i_14-Nov-2020/scripts/acc_examples000066400000000000000000000001141433453312700207170ustar00rootroot00000000000000P09488 sp|P09488 up|P09488|GSTM1_HUMAN SP:GSTM1_HUMAN P09488 SP:GSTM1_HUMAN fasta36-36.3.8i_14-Nov-2020/scripts/ann_exons_all.pl000077500000000000000000000303771433453312700215460ustar00rootroot00000000000000#!/usr/bin/env perl ################################################################ # copyright (c) 2014,2015 by William R. Pearson and The Rector & # Visitors of the University of Virginia ################################################################ # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under this License is distributed on an "AS # IS" BASIS, WITHOUT WRRANTIES OR CONDITIONS OF ANY KIND, either # express or implied. See the License for the specific language # governing permissions and limitations under the License. ################################################################ # ann_exons_up_sql.pl gets an annotation file from fasta36 -V with a line of the form: # gi|62822551|sp|P00502|GSTA1_RAT Glutathione S-transfer\n (at least from pir1.lseg) # # it must: # (1) read in the line # (2) parse it to get the up_acc # (3) return the tab delimited features # this version can read feature2 uniprot features (acc/pos/end/label/value), but returns sorted start/end domains # modified 18-Jan-2016 to produce annotation symbols consistent with ann_exons_up_www2.pl # modified Dec 2018 to generate genomic coordinates with --gen_coord # modified 3-Jan-2019 to merge sql and www (--www) access to exon coordinates use warnings; use strict; use DBI; use Getopt::Long; use Pod::Usage; use LWP::Simple; use LWP::UserAgent; use JSON qw(decode_json); use vars qw($host $db $a_table $port $user $pass); my %domains = (); my $domain_cnt = 0; my $hostname = `/bin/hostname`; unless ($hostname =~ m/ebi/) { ($host, $db, $a_table, $port, $user, $pass) = ("wrpxdb.its.virginia.edu", "uniprot", "annot2", 0, "web_user", "fasta_www"); # $host = 'xdb'; } else { ($host, $db, $a_table, $port, $user, $pass) = ("mysql-pearson-prod", "up_db", "annot", 4124, "web_user", "fasta_www"); } my ($lav, $gen_coord, $exon_label, $use_www, $shelp, $help) = (0,0,0,0,0,0); my ($show_color) = (1); my $color_sep_str = " :"; $color_sep_str = '~'; GetOptions( "gen_coord|gene_coord!" => \$gen_coord, "exon_label|label_exons!" => \$exon_label, "www!" => \$use_www, "host=s" => \$host, "db=s" => \$db, "user=s" => \$user, "password=s" => \$pass, "port=i" => \$port, "lav" => \$lav, "h|?" => \$shelp, "help" => \$help, ); pod2usage(1) if $shelp; pod2usage(exitstatus => 0, verbose => 2) if $help; pod2usage(1) unless (@ARGV || -p STDIN || -f STDIN); my $connect = "dbi:mysql(AutoCommit=>1,RaiseError=>1):database=$db"; $connect .= ";host=$host" if $host; $connect .= ";port=$port" if $port; my $dbh = DBI->connect($connect, $user, $pass ) or die $DBI::errstr; my $get_annot_sub = \&get_annots; my $ua = LWP::UserAgent->new(ssl_opts=>{verify_hostname => 0}); my $uniprot_url = 'https://www.ebi.ac.uk/proteins/api/coordinates/'; my $uniprot_suff = ".json"; if ($use_www) { $get_annot_sub = \&get_annots_up_www; } my $get_annots_id = $dbh->prepare(qq(select up_exons.* from up_exons join annot2 using(acc) where id=? order by ix)); my $get_annots_acc = $dbh->prepare(qq(select up_exons.* from up_exons where acc=? order by ix)); my $get_annots_refacc = $dbh->prepare(qq(select ref_acc, start, end, ix from up_exons join annot2 using(acc) where ref_acc=? order by ix)); my $get_annots_refseq = $dbh->prepare(qq(select acc, ex_p_start as start, ex_p_end as end, ex_num as ix, chrom, g_start, g_end from seqdb_demo2.ref_exons where acc=? order by ix)); my $get_annots_sql = $get_annots_acc; my ($tmp, $gi, $sdb, $acc, $id, $use_acc); # get the query my ($query, $seq_len) = @ARGV; $seq_len = 0 unless defined($seq_len); $query =~ s/^>// if ($query); my @annots = (); #if it's a file I can open, read and parse it #unless ($query && ($query =~ m/[\|:]/ || # $query =~ m/^[NX]P_/ || # $query =~ m/^[OPQ][0-9][A-Z0-9]{3}[0-9]|[A-NR-Z][0-9]([A-Z][A-Z0-9]{2}[0-9]){1,2}\s/)) { if (! $query || -r $query) { while (my $a_line = <>) { $a_line =~ s/^>//; chomp $a_line; push @annots, show_annots($a_line, $get_annot_sub, $use_www); } } else { push @annots, show_annots("$query\t$seq_len", $get_annot_sub, $use_www); } for my $seq_annot (@annots) { print ">",$seq_annot->{seq_info},"\n"; for my $annot (@{$seq_annot->{list}}) { if (!$lav && $show_color && defined($domains{$annot->[-1]})) { $annot->[-1] .= $color_sep_str.$domains{$annot->[-1]}; } print join("\t",@$annot),"\n"; } } exit(0); sub show_annots { my ($query_len, $get_annot_sub, $use_www) = @_; my ($annot_line, $seq_len) = split(/\t/,$query_len); my %annot_data = (seq_info=>$annot_line); if ($annot_line =~ m/^gi\|/) { $use_acc = 1; ($tmp, $gi, $sdb, $acc, $id) = split(/\|/,$annot_line); } elsif ($annot_line =~ m/^(SP|TR):(\w+) (\w+)/) { ($sdb, $id, $acc) = ($1,$2,$3); $use_acc = 1; $sdb = lc($sdb) } elsif ($annot_line =~ m/^(SP|TR):(\w+)/) { ($sdb, $id) = ($1,$2); $use_acc = 0; $sdb = lc($sdb) } elsif ($annot_line !~ m/\|/) { # new NCBI swissprot format $use_acc =1; if ($annot_line =~ m/[NXY]P_\d+/) { $sdb = 'ref'; } else { $sdb = 'sp'; } ($acc) = split(/\s+/,$annot_line); } else { $use_acc = 1; ($sdb, $acc, $id) = split(/\|/,$annot_line); } unless ($use_acc) { $get_annots_sql = $get_annots_id; $get_annots_sql->execute($id); } else { if ($sdb =~ m/ref/) { $get_annots_sql = $get_annots_refseq; } else { $get_annots_sql = $get_annots_acc; } $acc =~ s/\.\d+$//; unless ($use_www) { $get_annots_sql->execute($acc); } else { $get_annots_sql = $acc; } } $annot_data{list} = $get_annot_sub->($get_annots_sql, $seq_len); return \%annot_data; } sub get_annots { my ($get_annots_sql, $seq_len) = @_; my @feats = (); while (my $exon_hr = $get_annots_sql->fetchrow_hashref()) { my $ix = $exon_hr->{ix}; if ($lav) { push @feats, [$exon_hr->{start}, $exon_hr->{end}, "exon_$ix~$ix"]; } else { my ($exon_info,$ex_info_start, $ex_info_end) = ("exon_$ix~$ix","",""); if ($gen_coord) { if (defined($exon_hr->{g_start})) { my $chr=$exon_hr->{chrom}; $chr = "unk" unless $chr; if ($chr =~ m/^\d+$/ || $chr =~m/^[XYZ]+$/) { $chr = "chr$chr"; } $ex_info_start = sprintf("exon_%d::%s:%d",$ix, $chr, $exon_hr->{g_start}); $ex_info_end = sprintf("exon_%d::%s:%d",$ix, $chr, $exon_hr->{g_end}); if ($exon_label) { $exon_info = sprintf("exon_%d{%s:%d-%d}~%d",$ix, $chr, $exon_hr->{g_start}, $exon_hr->{g_end}, $ix); push @feats, [$exon_hr->{start}, "-", $exon_hr->{end}, $exon_info]; } else { push @feats, [$exon_hr->{start}, "-", $exon_hr->{end}, $exon_info]; push @feats, [$exon_hr->{start},'<','-',$ex_info_start]; push @feats, [$exon_hr->{end},'>','-',$ex_info_end]; } } } else { push @feats, [$exon_hr->{start}, "-", $exon_hr->{end}, $exon_info]; } } } return \@feats; } sub get_annots_up_www { my ($acc, $seq_len) = @_; my @feats = (); # my $exon_json = get_https($uniprot_url.$acc.$uniprot_suff); my $exon_json = get($uniprot_url.$acc.$uniprot_suff); unless (!$exon_json || $exon_json =~ m/errorMessage/ || $exon_json =~ m/Can not find/) { return parse_json_up_exons($exon_json); } else { return (); } } sub parse_json_up_exons { my ($exon_json) = @_; my @exons = (); my @ex_coords = (); my $acc_exons = decode_json($exon_json); my $exon_num = 1; my $last_end = 0; my $last_phase = 0; my $chrom = $acc_exons->{'gnCoordinate'}[0]{'genomicLocation'}{'chromosome'}; my $rev_strand = $acc_exons->{'gnCoordinate'}[0]{'genomicLocation'}{'reverseStrand'}; for my $exon ( @{$acc_exons->{'gnCoordinate'}[0]{'genomicLocation'}{'exon'}} ) { my ($p_begin, $p_end) = ($exon->{'proteinLocation'}{'begin'}{'position'},$exon->{'proteinLocation'}{'end'}{'position'}); my ($g_begin, $g_end) = ($exon->{'genomeLocation'}{'begin'}{'position'},$exon->{'genomeLocation'}{'end'}{'position'}); my $this_phase = 0; if (defined($g_begin) && defined($g_end)) { $this_phase = ($g_end - $g_begin + 1) % 3; } if (!defined($p_begin) || !defined($p_end)) { $exon_num++; $last_phase = 0; next; } if ($p_end >= $p_begin) { if ($p_begin == $last_end) { if ($last_phase==2) { $p_begin += 1; } elsif ($last_phase==1) { $last_end -= 1; $exons[-1]->{seq_end} -= 1; } } if ($p_begin <= $last_end && $p_end > $last_end) { $p_begin = $last_end+1; } $last_end = $p_end; $last_phase = $this_phase; my ($gs_begin, $gs_end) = ($g_begin, $g_end); if ($rev_strand) { ($gs_begin, $gs_end) = ($g_end, $g_begin); } push @exons, { ix=>$exon_num, start=>$p_begin, end=>$p_end, g_start=>$gs_begin, g_end=>$gs_end, chrom=>$chrom, }; $exon_num++; } } # check for domain overlap, and resolve check for domain overlap # (possibly more than 2 domains), choosing the domain with the best # evalue my @ex_feats = (); for my $exon_hr (@exons) { my $ix = $exon_hr->{ix}; if ($lav) { push @ex_feats, [$exon_hr->{start}, $exon_hr->{end}, "exon_$ix~$ix" ]; } else { my ($exon_info,$ex_info_start, $ex_info_end) = ("exon_$ix~$ix","",""); if ($gen_coord) { if (defined($exon_hr->{g_start})) { my $chr=$exon_hr->{chrom}; $chr = "unk" unless $chr; if ($chr =~ m/^\d+$/ || $chr =~m/^[XYZ]+$/) { $chr = "chr$chr"; } $ex_info_start = sprintf("exon_%d::%s:%d",$ix, $chr, $exon_hr->{g_start}); $ex_info_end = sprintf("exon_%d::%s:%d",$ix, $chr, $exon_hr->{g_end}); if ($exon_label) { $exon_info = sprintf("exon_%d{%s:%d-%d}~%d",$ix, $chr, $exon_hr->{g_start}, $exon_hr->{g_end},$ix); push @ex_feats, [$exon_hr->{start}, "-", $exon_hr->{end}, $exon_info]; } else { push @ex_feats, [$exon_hr->{start}, "-", $exon_hr->{end}, $exon_info]; push @ex_feats, [$exon_hr->{start},'<','-',$ex_info_start]; push @ex_feats, [$exon_hr->{end},'>','-',$ex_info_end]; } } } else { push @ex_feats, [$exon_hr->{start}, "-", $exon_hr->{end}, $exon_info]; } } } return \@ex_feats; } sub get_https { my ($url) = @_; my $result = ""; my $response = $ua->get($url); if ($response->is_success) { $result = $response->decoded_content; } else { $result = ''; } return $result; } __END__ =pod =head1 NAME ann_exons_up_sql.pl =head1 SYNOPSIS ann_exons_up_sql.pl --lav 'sp|P09488|GSTM1_NUMAN' | accession.file =head1 OPTIONS -h short help --help include description --gen_coord -- provide genomic exon start/stop coordinates as features --lav produce lav2plt.pl annotation format, only show domains/repeats --host, --user, --password, --port --db -- info for mysql database =head1 DESCRIPTION C extracts exon location information from msyql databases (uniprot for Uniprot proteins, seqdb_demo2 for refseq) built from EBI/proteins API data (Uniprot) or Refseq GFF data (refseq). Given a command line argument that contains a sequence accession (P09488) or identifier (GSTM1_HUMAN), the program looks up the features available for that sequence and returns them in a tab-delimited format: >sp|P09488|GSTM1_HUMAN 1 - 12 exon_1~1 13 - 38 exon_2~2 39 - 59 exon_3~3 60 - 87 exon_4~4 88 - 120 exon_5~5 121 - 152 exon_6~6 153 - 189 exon_7~7 190 - 218 exon_8~8 Calso provides genomic coordinates: >sp|P09488|GSTM1_HUMAN 1 - 12 exon_1~1 1 < - exon_1::chr1:109687874 12 > - exon_1::chr1:109687909 13 - 37 exon_2~2 13 < - exon_2::chr1:109688170 37 > - exon_2::chr1:109688245 38 - 59 exon_3~3 38 < - exon_3::chr1:109688673 59 > - exon_3::chr1:109688737 ... 190 - 218 exon_8~8 190 < - exon_8::chr1:109693206 218 > - exon_8::chr1:109693292 C is designed to be used by the B programs with the C<-V \!ann_exons_all.pl> option, or by the C script. It can also be used with the lav2plt.pl program with the C<--xA "\!ann_exons_all.pl --lav"> or C<--yA "\!ann_exons_all.pl --lav"> options. =head1 AUTHOR William R. Pearson, wrp@virginia.edu =cut fasta36-36.3.8i_14-Nov-2020/scripts/ann_exons_ens.pl000077500000000000000000000161051433453312700215540ustar00rootroot00000000000000#!/usr/bin/env perl ################################################################ # copyright (c) 2014,2015 by William R. Pearson and The Rector & # Visitors of the University of Virginia */ ################################################################ # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under this License is distributed on an "AS # IS" BASIS, WITHOUT WRRANTIES OR CONDITIONS OF ANY KIND, either # express or implied. See the License for the specific language # governing permissions and limitations under the License. ################################################################ # ann_exons_ens.pl gets an annotation file from fasta36 -V with a line of the form: # gi|23065544|ref|NP_000552.2| # # and returns the exons present in the protein from NCBI gff3 tables (human and mouse only) # # it must: # (1) read in the line # (2) parse it to get the acc # (3) return the tab delimited exon boundaries use warnings; use strict; use DBI; use Getopt::Long; use Pod::Usage; use vars qw($host $db $port $user $pass); my $hostname = `/bin/hostname`; ($host, $db, $port, $user, $pass) = ("wrpxdb.its.virginia.edu", "uniprot", 0, "web_user", "fasta_www"); my ($auto_reg,$rpd2_fams, $neg_doms, $lav, $no_doms, $pf_acc, $shelp, $help) = (0, 0, 0, 0,0, 0,0,0); my ($min_nodom) = (10); my $color_sep_str = " :"; $color_sep_str = '~'; GetOptions( "host=s" => \$host, "db=s" => \$db, "user=s" => \$user, "password=s" => \$pass, "port=i" => \$port, "lav" => \$lav, "min_nodom=i" => \$min_nodom, "h|?" => \$shelp, "help" => \$help, ); pod2usage(1) if $shelp; pod2usage(exitstatus => 0, verbose => 2) if $help; pod2usage(1) unless (@ARGV || -p STDIN || -f STDIN); my $connect = "dbi:mysql(AutoCommit=>1,RaiseError=>1):database=$db"; $connect .= ";host=$host" if $host; $connect .= ";port=$port" if $port; my $dbh = DBI->connect($connect, $user, $pass ) or die $DBI::errstr; my %annot_types = (); my %domains = (NODOM=>0); my $domain_cnt = 0; my $get_annot_sub = \&get_ensembl_exons; my $get_exons_acc = $dbh->prepare(<prepare(<// if ($query); my @annots = (); #if it's a file I can open, read and parse it # unless ($query && ( $query =~ m/[\|:]/ # || $query =~ m/^[OPQ][0-9][A-Z0-9]{3}[0-9]|[A-NR-Z][0-9]([A-Z][A-Z0-9]{2}[0-9]){1,2}\s/ # || $query =~ m/^(XN)(MP)_\d+/)) { if (! $query || -r $query) { while (my $a_line = <>) { $a_line =~ s/^>//; chomp $a_line; push @annots, show_annots($a_line, $get_annot_sub); } } else { push @annots, show_annots("$query\t$seq_len", $get_annot_sub); } for my $seq_annot (@annots) { print ">",$seq_annot->{seq_info},"\n"; for my $annot (@{$seq_annot->{list}}) { if (!$lav && defined($domains{$annot->[-1]})) { $annot->[-1] .= $color_sep_str.$domains{$annot->[-1]}; } print join("\t",@$annot),"\n"; } } exit(0); sub show_annots { my ($query_len, $get_annot_sub) = @_; my ($annot_line, $seq_len) = split(/\t/,$query_len); my $pfamA_acc; my %annot_data = (seq_info=>$annot_line); $use_acc = 1; $get_annots_sql = $get_exons_acc; if ($annot_line =~ m/^gi\|/) { ($tmp, $gi, $sdb, $acc, $id) = split(/\|/,$annot_line); } elsif ($annot_line =~ m/^(sp|tr|up)\|/) { ($sdb, $acc, $id) = split(/\|/,$annot_line); } elsif ($annot_line =~ m/^(SP|TR):(\w+) (\w+)/) { ($sdb, $id, $acc) = (lc($1), $2, $3); } elsif ($annot_line =~ m/^(SP|TR):(\w+)/) { ($sdb, $id, $acc) = (lc($1), $2, ""); $use_acc=0; } elsif ($annot_line =~ m/\|/) { ($sdb, $acc, $db) = split(/\|/,$annot_line); } else { ($acc) = ($annot_line =~ m/^(\S+)/); } $acc =~ s/\.\d+$//; if ($use_acc) { $get_annots_sql->execute($acc); } else { $get_annots_sql = $get_exons_id; $get_annots_sql->execute($id); } $annot_data{list} = $get_annot_sub->($get_annots_sql, $seq_len); return \%annot_data; } sub get_ensembl_exons { my ($get_annots, $seq_length) = @_; my @exons = (); # get the list of domains, sorted by start while ( my $row_href = $get_annots->fetchrow_hashref()) { $row_href->{info} = "exon_".$row_href->{ex_num}; push @exons, $row_href } # check for domain overlap, and resolve check for domain overlap # (possibly more than 2 domains), choosing the domain with the best # evalue my @feats = (); for my $d_ref (@exons) { if ($lav) { push @feats, [$d_ref->{seq_start}, $d_ref->{seq_end}, $d_ref->{info}]; } else { push @feats, [$d_ref->{seq_start}, '-', $d_ref->{seq_end}, $d_ref->{info} ]; # push @feats, [$d_ref->{seq_end}, ']', '-', ""]; } } return \@feats; } # domain name takes a uniprot domain label, removes comments ( ; # truncated) and numbers and returns a canonical form. Thus: # Cortactin 6. # Cortactin 7; truncated. # becomes "Cortactin" # sub domain_name { my ($value) = @_; if (!defined($domains{$value})) { $domain_cnt++; $domains{$value} = $domain_cnt; } return $value; } __END__ =pod =head1 NAME ann_feats.pl =head1 SYNOPSIS ann_pfam.pl --neg-doms 'sp|P09488|GSTM1_NUMAN' | accession.file =head1 OPTIONS -h short help --help include description --neg-doms, -- report domains between annotated domains as NODOM (also --neg, --neg_doms) --min_nodom=10 -- minimum length between domains for NODOM --host, --user, --password, --port --db -- info for mysql database =head1 DESCRIPTION C extracts domain information from a msyql database. Currently, the program works with database sequence descriptions in one of two formats: >pf26|649|O94823|AT10B_HUMAN -- RPD2_seqs (pf26 databases have auto_pfamseq in the second field) and >gi|1705556|sp|P54670.1|CAF1_DICDI C uses the C, C, and C tables of the C database to extract domain information on a protein. For proteins that have multiple domains associated with the same overlapping region (domains overlap by more than 1/3 of the domain length), C selects the domain annotation with the best C. When domains overlap by less than 1/3 of the domain length, they are shortened to remove the overlap. C is designed to be used by the B programs with the C<-V \!ann_pfam.pl> or C<-V "\!ann_pfam.pl --neg"> option. =head1 AUTHOR William R. Pearson, wrp@virginia.edu =cut fasta36-36.3.8i_14-Nov-2020/scripts/ann_exons_ncbi.pl000077500000000000000000000115211433453312700216770ustar00rootroot00000000000000#!/usr/bin/env perl # ann_exons_ncbi.pl gets an annotation file from fasta36 -V with a line of the form: ## modified 17-Dec-2020 to allow [NXYW]P_ accessions ## # gi|23065544|ref|NP_000552.2| or # NP_000552 # # and returns the exons present in the protein from NCBI gff3 tables (human, mouse, rat, xtrop) # # it must: # (1) read in the line # (2) parse it to get the acc # (3) return the tab delimited exon boundaries # use warnings; use strict; use DBI; use Getopt::Long; use Pod::Usage; use vars qw($host $db $port $user $pass); my $hostname = `/bin/hostname`; ($host, $db, $port, $user, $pass) = ("wrpxdb.its.virginia.edu", "seqdb_demo2", 0, "web_user", "fasta_www"); my ($lav, $shelp, $help) = (0, 0, 0); my $color_sep_str = " :"; $color_sep_str = '~'; GetOptions( "host=s" => \$host, "db=s" => \$db, "user=s" => \$user, "password=s" => \$pass, "port=i" => \$port, "lav" => \$lav, "h|?" => \$shelp, "help" => \$help, ); pod2usage(1) if $shelp; pod2usage(exitstatus => 0, verbose => 2) if $help; pod2usage(1) unless (@ARGV || -p STDIN || -f STDIN); my $connect = "dbi:mysql(AutoCommit=>1,RaiseError=>1):database=$db"; $connect .= ";host=$host" if $host; $connect .= ";port=$port" if $port; my $dbh = DBI->connect($connect, $user, $pass ) or die $DBI::errstr; my %annot_types = (); my %domains = (NODOM=>0); my $domain_cnt = 0; my $get_annot_sub = \&get_refseq_exons; my $get_exons_acc = $dbh->prepare(<// if ($query); my @annots = (); # if it's a file I can open, read and parse it # check to see if it looks like an accession ## unless ($query && ($query =~ m/[\|:]/ || $query =~ m/^[NXYW]P_/)) { # it would be better to check to see if a file could be opened if (! $query || -r $query) { while (my $a_line = <>) { $a_line =~ s/^>//; chomp $a_line; push @annots, show_annots($a_line, $get_annot_sub); } } else { push @annots, show_annots("$query $seq_len", $get_annot_sub); } for my $seq_annot (@annots) { print ">",$seq_annot->{seq_info},"\n"; for my $annot (@{$seq_annot->{list}}) { if (!$lav && defined($domains{$annot->[-1]})) { $annot->[-1] .= $color_sep_str.$domains{$annot->[-1]}; } print join("\t",@$annot),"\n"; } } exit(0); sub show_annots { my ($query_len, $get_annot_sub) = @_; my ($annot_line, $seq_len) = split(/\s+/,$query_len); my $pfamA_acc; my %annot_data = (seq_info=>$annot_line); $use_acc = 1; $get_annots_sql = $get_exons_acc; if ($annot_line =~ m/^gi\|/) { ($tmp, $gi, $sdb, $acc) = split(/\|/,$annot_line); } elsif ($annot_line =~ m/^ref\|/) { ($sdb, $acc) = split(/\|/,$annot_line); } else { $acc = $annot_line; } $acc =~ s/\.\d+$//; $get_annots_sql->execute($acc); $annot_data{list} = $get_annot_sub->($get_annots_sql, $seq_len); return \%annot_data; } sub get_refseq_exons { my ($get_annots, $seq_length) = @_; my @exons = (); # get the list of domains, sorted by start while ( my $row_href = $get_annots->fetchrow_hashref()) { $row_href->{info} = "exon_".$row_href->{ex_num}.$color_sep_str.$row_href->{ex_num}; push @exons, $row_href } # check for domain overlap, and resolve check for domain overlap # (possibly more than 2 domains), choosing the domain with the best # evalue my @feats = (); for my $d_ref (@exons) { if ($lav) { push @feats, [$d_ref->{seq_start}, $d_ref->{seq_end}, $d_ref->{info}]; } else { push @feats, [$d_ref->{seq_start}, '-', $d_ref->{seq_end}, $d_ref->{info} ]; # push @feats, [$d_ref->{seq_end}, ']', '-', ""]; } } return \@feats; } __END__ =pod =head1 NAME ann_exons_ncbi.pl =head1 SYNOPSIS ann_exons_ncbi.pl NP_000552 =head1 OPTIONS -h short help --help include description --lav produce lav2plt.pl annotation format, only show domains/repeats --host, --user, --password, --port --db -- info for mysql database =head1 DESCRIPTION C extracts domain information from a msyql database. Currently, the program works with database sequence descriptions in one of two formats: >gi|23065544|ref|NP_000552.2| or >NP_000552 C uses the C table of the C database to extract exon position information on a protein. The C table is constructed from refseq gff files using the C script. C is designed to be used by the B programs with the C<-V \!ann_exons_ncbi.pl> option. =head1 AUTHOR William R. Pearson, wrp@virginia.edu =cut fasta36-36.3.8i_14-Nov-2020/scripts/ann_exons_up_sql.pl000077500000000000000000000205331433453312700222720ustar00rootroot00000000000000#!/usr/bin/env perl ################################################################ # copyright (c) 2014,2015 by William R. Pearson and The Rector & # Visitors of the University of Virginia ################################################################ # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under this License is distributed on an "AS # IS" BASIS, WITHOUT WRRANTIES OR CONDITIONS OF ANY KIND, either # express or implied. See the License for the specific language # governing permissions and limitations under the License. ################################################################ # ann_exons_up_sql.pl gets an annotation file from fasta36 -V with a line of the form: # gi|62822551|sp|P00502|GSTA1_RAT Glutathione S-transfer\n (at least from pir1.lseg) # # it must: # (1) read in the line # (2) parse it to get the up_acc # (3) return the tab delimited features # this version can read feature2 uniprot features (acc/pos/end/label/value), but returns sorted start/end domains # modified 18-Jan-2016 to produce annotation symbols consistent with ann_exons_up_www2.pl use warnings; use strict; use DBI; use Getopt::Long; use Pod::Usage; use vars qw($host $db $a_table $port $user $pass); my %domains = (); my $domain_cnt = 0; my $hostname = `/bin/hostname`; unless ($hostname =~ m/ebi/) { ($host, $db, $a_table, $port, $user, $pass) = ("wrpxdb.its.virginia.edu", "uniprot", "annot2", 0, "web_user", "fasta_www"); # $host = 'xdb'; } else { ($host, $db, $a_table, $port, $user, $pass) = ("mysql-pearson-prod", "up_db", "annot", 4124, "web_user", "fasta_www"); } my ($lav, $gen_coord, $exon_label, $use_www, $shelp, $help) = (0,0,0,0,0,0); my ($show_color) = (1); my $color_sep_str = " :"; $color_sep_str = '~'; GetOptions( "gen_coord|gene_coord!" => \$gen_coord, "exon_label|label_exons!" => \$exon_label, "host=s" => \$host, "db=s" => \$db, "user=s" => \$user, "password=s" => \$pass, "port=i" => \$port, "lav" => \$lav, "h|?" => \$shelp, "help" => \$help, ); pod2usage(1) if $shelp; pod2usage(exitstatus => 0, verbose => 2) if $help; pod2usage(1) unless (@ARGV || -p STDIN || -f STDIN); my $connect = "dbi:mysql(AutoCommit=>1,RaiseError=>1):database=$db"; $connect .= ";host=$host" if $host; $connect .= ";port=$port" if $port; my $dbh = DBI->connect($connect, $user, $pass ) or die $DBI::errstr; my $get_annot_sub = \&get_annots; my $get_annots_id = $dbh->prepare(qq(select up_exons.* from up_exons join annot2 using(acc) where id=? order by ix)); my $get_annots_acc = $dbh->prepare(qq(select up_exons.* from up_exons where acc=? order by ix)); my $get_annots_refacc = $dbh->prepare(qq(select ref_acc, start, end, ix from up_exons join annot2 using(acc) where ref_acc=? order by ix)); my $get_annots_sql = $get_annots_acc; my ($tmp, $gi, $sdb, $acc, $id, $use_acc); # get the query my ($query, $seq_len) = @ARGV; $seq_len = 0 unless defined($seq_len); $query =~ s/^>// if ($query); my @annots = (); #if it's a file I can open, read and parse it # unless ($query && ($query =~ m/[\|:]/ || # $query =~ m/^[NX]P_/ || # $query =~ m/^[OPQ][0-9][A-Z0-9]{3}[0-9]|[A-NR-Z][0-9]([A-Z][A-Z0-9]{2}[0-9]){1,2}\s/)) { if (! $query || -r $query) { while (my $a_line = <>) { $a_line =~ s/^>//; chomp $a_line; push @annots, show_annots($a_line, $get_annot_sub); } } else { push @annots, show_annots("$query\t$seq_len", $get_annot_sub); } for my $seq_annot (@annots) { print ">",$seq_annot->{seq_info},"\n"; for my $annot (@{$seq_annot->{list}}) { if (!$lav && $show_color && defined($domains{$annot->[-1]})) { $annot->[-1] .= $color_sep_str.$domains{$annot->[-1]}; } print join("\t",@$annot),"\n"; } } exit(0); sub show_annots { my ($query_len, $get_annot_sub) = @_; my ($annot_line, $seq_len) = split(/\t/,$query_len); my %annot_data = (seq_info=>$annot_line); if ($annot_line =~ m/^gi\|/) { $use_acc = 1; ($tmp, $gi, $sdb, $acc, $id) = split(/\|/,$annot_line); } elsif ($annot_line =~ m/^(SP|TR):(\w+) (\w+)/) { ($sdb, $id, $acc) = ($1,$2,$3); $use_acc = 1; $sdb = lc($sdb) } elsif ($annot_line =~ m/^(SP|TR):(\w+)/) { ($sdb, $id) = ($1,$2); $use_acc = 0; $sdb = lc($sdb) } elsif ($annot_line !~ m/\|/) { # new NCBI swissprot format $use_acc =1; $sdb = 'sp'; ($acc) = split(/\s+/,$annot_line); } else { $use_acc = 1; ($sdb, $acc, $id) = split(/\|/,$annot_line); } # remove version number unless ($use_acc) { $get_annots_sql = $get_annots_id; $get_annots_sql->execute($id); } else { unless ($sdb =~ m/ref/) { $get_annots_sql = $get_annots_acc; } else { $get_annots_sql = $get_annots_refacc; } $acc =~ s/\.\d+$//; $get_annots_sql->execute($acc); } $annot_data{list} = $get_annot_sub->($get_annots_sql, $seq_len); return \%annot_data; } sub get_annots { my ($get_annots_sql, $seq_len) = @_; my @feats = (); while (my $exon_hr = $get_annots_sql->fetchrow_hashref()) { my $ix = $exon_hr->{ix}; if ($lav) { push @feats, [$exon_hr->{start}, $exon_hr->{end}, "exon_$ix~$ix"]; } else { my ($exon_info,$ex_info_start, $ex_info_end) = ("exon_$ix~$ix","",""); if ($gen_coord) { if (defined($exon_hr->{g_start})) { my $chr=$exon_hr->{chrom}; $chr = "unk" unless $chr; if ($chr =~ m/^\d+$/ || $chr =~m/^[XYZ]+$/) { $chr = "chr$chr"; } $ex_info_start = sprintf("exon_%d::%s:%d",$ix, $chr, $exon_hr->{g_start}); $ex_info_end = sprintf("exon_%d::%s:%d",$ix, $chr, $exon_hr->{g_end}); if ($exon_label) { $exon_info = sprintf("exon_%d{%s:%d-%d}~%d",$ix, $chr, $exon_hr->{g_start}, $exon_hr->{g_end}, $ix); push @feats, [$exon_hr->{start}, "-", $exon_hr->{end}, $exon_info]; } else { push @feats, [$exon_hr->{start}, "-", $exon_hr->{end}, $exon_info]; push @feats, [$exon_hr->{start},'<','-',$ex_info_start]; push @feats, [$exon_hr->{end},'>','-',$ex_info_end]; } } } else { push @feats, [$exon_hr->{start}, "-", $exon_hr->{end}, $exon_info]; } } } return \@feats; } __END__ =pod =head1 NAME ann_exons_up_sql.pl =head1 SYNOPSIS ann_exons_up_sql.pl --lav 'sp|P09488|GSTM1_NUMAN' | accession.file =head1 OPTIONS -h short help --help include description --gen_coord -- provide genomic exon start/stop coordinates as features --lav produce lav2plt.pl annotation format, only show domains/repeats --host, --user, --password, --port --db -- info for mysql database =head1 DESCRIPTION C extracts exon location information from a msyql database (default name, uniprot) built from EBI/proteins API data. Given a command line argument that contains a sequence accession (P09488) or identifier (GSTM1_HUMAN), the program looks up the features available for that sequence and returns them in a tab-delimited format: C: >sp|P09488|GSTM1_HUMAN 1 - 12 exon_1~1 13 - 37 exon_2~2 38 - 59 exon_3~3 60 - 86 exon_4~4 87 - 120 exon_5~5 121 - 152 exon_6~6 153 - 189 exon_7~7 190 - 218 exon_8~8 C also provides genomic coordinates: >sp|P09488|GSTM1_HUMAN 1 - 12 exon_1~1 1 < - exon_1::chr1:109687874 12 > - exon_1::chr1:109687909 13 - 37 exon_2~2 13 < - exon_2::chr1:109688170 37 > - exon_2::chr1:109688245 ... 190 - 218 exon_8~8 190 < - exon_8::chr1:109693206 218 > - exon_8::chr1:109693292 C provides genomic coordinates on a single line: >sp|P09488|GSTM1_HUMAN 1 - 12 exon_1{chr1:109687874-109687909}~1 13 - 37 exon_2{chr1:109688170-109688245}~2 ... 153 - 189 exon_7{chr1:109690454-109690564}~7 190 - 218 exon_8{chr1:109693206-109693292}~8 C is designed to be used by the B programs with the C<-V \!ann_exons_up_sql.pl> option, or by the C script. It can also be used with the lav2plt.pl program with the C<--xA "\!ann_exons_up_sql.pl --lav"> or C<--yA "\!ann_exons_up_sql.pl --lav"> options. =head1 AUTHOR William R. Pearson, wrp@virginia.edu =cut fasta36-36.3.8i_14-Nov-2020/scripts/ann_exons_up_sql_www.pl000077500000000000000000000277071433453312700232100ustar00rootroot00000000000000#!/usr/bin/env perl ################################################################ # copyright (c) 2014,2015 by William R. Pearson and The Rector & # Visitors of the University of Virginia ################################################################ # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under this License is distributed on an "AS # IS" BASIS, WITHOUT WRRANTIES OR CONDITIONS OF ANY KIND, either # express or implied. See the License for the specific language # governing permissions and limitations under the License. ################################################################ # ann_exons_up_sql.pl gets an annotation file from fasta36 -V with a line of the form: # gi|62822551|sp|P00502|GSTA1_RAT Glutathione S-transfer\n (at least from pir1.lseg) # # it must: # (1) read in the line # (2) parse it to get the up_acc # (3) return the tab delimited features # this version can read feature2 uniprot features (acc/pos/end/label/value), but returns sorted start/end domains # modified 18-Jan-2016 to produce annotation symbols consistent with ann_exons_up_www2.pl # modified Dec 2018 to generate genomic coordinates with --gen_coord # modified 3-Jan-2019 to merge sql and www (--www) access to exon coordinates use warnings; use strict; use DBI; use Getopt::Long; use Pod::Usage; use LWP::Simple; use LWP::UserAgent; use JSON qw(decode_json); use vars qw($host $db $a_table $port $user $pass); my %domains = (); my $domain_cnt = 0; my $hostname = `/bin/hostname`; unless ($hostname =~ m/ebi/) { ($host, $db, $a_table, $port, $user, $pass) = ("wrpxdb.its.virginia.edu", "uniprot", "annot2", 0, "web_user", "fasta_www"); # $host = 'xdb'; } else { ($host, $db, $a_table, $port, $user, $pass) = ("mysql-pearson-prod", "up_db", "annot", 4124, "web_user", "fasta_www"); } my ($lav, $gen_coord, $exon_label, $use_www, $shelp, $help) = (0,0,0,0,0,0); my ($show_color) = (1); my $color_sep_str = " :"; $color_sep_str = '~'; GetOptions( "gen_coord|gene_coord!" => \$gen_coord, "exon_label|label_exons!" => \$exon_label, "www!" => \$use_www, "host=s" => \$host, "db=s" => \$db, "user=s" => \$user, "password=s" => \$pass, "port=i" => \$port, "lav" => \$lav, "h|?" => \$shelp, "help" => \$help, ); pod2usage(1) if $shelp; pod2usage(exitstatus => 0, verbose => 2) if $help; pod2usage(1) unless (@ARGV || -p STDIN || -f STDIN); my $connect = "dbi:mysql(AutoCommit=>1,RaiseError=>1):database=$db"; $connect .= ";host=$host" if $host; $connect .= ";port=$port" if $port; my $dbh = DBI->connect($connect, $user, $pass ) or die $DBI::errstr; my $get_annot_sub = \&get_annots; my $ua = LWP::UserAgent->new(ssl_opts=>{verify_hostname => 0}); my $uniprot_url = 'https://www.ebi.ac.uk/proteins/api/coordinates/'; my $uniprot_suff = ".json"; if ($use_www) { $get_annot_sub = \&get_annots_up_www; } my $get_annots_id = $dbh->prepare(qq(select up_exons.* from up_exons join annot2 using(acc) where id=? order by ix)); my $get_annots_acc = $dbh->prepare(qq(select up_exons.* from up_exons where acc=? order by ix)); my $get_annots_refacc = $dbh->prepare(qq(select ref_acc, start, end, ix from up_exons join annot2 using(acc) where ref_acc=? order by ix)); my $get_annots_sql = $get_annots_acc; my ($tmp, $gi, $sdb, $acc, $id, $use_acc); # get the query my ($query, $seq_len) = @ARGV; $seq_len = 0 unless defined($seq_len); $query =~ s/^>// if ($query); my @annots = (); #if it's a file I can open, read and parse it # unless ($query && ($query =~ m/[\|:]/ || # $query =~ m/^[NX]P_/ || # $query =~ m/^[OPQ][0-9][A-Z0-9]{3}[0-9]|[A-NR-Z][0-9]([A-Z][A-Z0-9]{2}[0-9]){1,2}\s/)) { if (! $query || -r $query) { while (my $a_line = <>) { $a_line =~ s/^>//; chomp $a_line; push @annots, show_annots($a_line, $get_annot_sub, $use_www); } } else { push @annots, show_annots("$query\t$seq_len", $get_annot_sub, $use_www); } for my $seq_annot (@annots) { print ">",$seq_annot->{seq_info},"\n"; for my $annot (@{$seq_annot->{list}}) { if (!$lav && $show_color && defined($domains{$annot->[-1]})) { $annot->[-1] .= $color_sep_str.$domains{$annot->[-1]}; } print join("\t",@$annot),"\n"; } } exit(0); sub show_annots { my ($query_len, $get_annot_sub, $use_www) = @_; my ($annot_line, $seq_len) = split(/\t/,$query_len); my %annot_data = (seq_info=>$annot_line); if ($annot_line =~ m/^gi\|/) { $use_acc = 1; ($tmp, $gi, $sdb, $acc, $id) = split(/\|/,$annot_line); } elsif ($annot_line =~ m/^(SP|TR):(\w+) (\w+)/) { ($sdb, $id, $acc) = ($1,$2,$3); $use_acc = 1; $sdb = lc($sdb) } elsif ($annot_line =~ m/^(SP|TR):(\w+)/) { ($sdb, $id) = ($1,$2); $use_acc = 0; $sdb = lc($sdb) } elsif ($annot_line !~ m/\|/) { # new NCBI swissprot format $use_acc =1; $sdb = 'sp'; ($acc) = split(/\s+/,$annot_line); } else { $use_acc = 1; ($sdb, $acc, $id) = split(/\|/,$annot_line); } unless ($use_acc) { $get_annots_sql = $get_annots_id; $get_annots_sql->execute($id); } else { unless ($sdb =~ m/ref/) { $get_annots_sql = $get_annots_acc; } else { $get_annots_sql = $get_annots_refacc; } $acc =~ s/\.\d+$//; unless ($use_www) { $get_annots_sql->execute($acc); } else { $get_annots_sql = $acc; } } $annot_data{list} = $get_annot_sub->($get_annots_sql, $seq_len); return \%annot_data; } sub get_annots { my ($get_annots_sql, $seq_len) = @_; my @feats = (); while (my $exon_hr = $get_annots_sql->fetchrow_hashref()) { my $ix = $exon_hr->{ix}; if ($lav) { push @feats, [$exon_hr->{start}, $exon_hr->{end}, "exon_$ix~$ix"]; } else { my ($exon_info,$ex_info_start, $ex_info_end) = ("exon_$ix~$ix","",""); if ($gen_coord) { if (defined($exon_hr->{g_start})) { my $chr=$exon_hr->{chrom}; $chr = "unk" unless $chr; if ($chr =~ m/^\d+$/ || $chr =~m/^[XYZ]+$/) { $chr = "chr$chr"; } $ex_info_start = sprintf("exon_%d::%s:%d",$ix, $chr, $exon_hr->{g_start}); $ex_info_end = sprintf("exon_%d::%s:%d",$ix, $chr, $exon_hr->{g_end}); if ($exon_label) { $exon_info = sprintf("exon_%d{%s:%d-%d}~%d",$ix, $chr, $exon_hr->{g_start}, $exon_hr->{g_end}, $ix); push @feats, [$exon_hr->{start}, "-", $exon_hr->{end}, $exon_info]; } else { push @feats, [$exon_hr->{start}, "-", $exon_hr->{end}, $exon_info]; push @feats, [$exon_hr->{start},'<','-',$ex_info_start]; push @feats, [$exon_hr->{end},'>','-',$ex_info_end]; } } } else { push @feats, [$exon_hr->{start}, "-", $exon_hr->{end}, $exon_info]; } } } return \@feats; } sub get_annots_up_www { my ($acc, $seq_len) = @_; my @feats = (); # my $exon_json = get_https($uniprot_url.$acc.$uniprot_suff); my $exon_json = get($uniprot_url.$acc.$uniprot_suff); unless (!$exon_json || $exon_json =~ m/errorMessage/ || $exon_json =~ m/Can not find/) { return parse_json_up_exons($exon_json); } else { return (); } } sub parse_json_up_exons { my ($exon_json) = @_; my @exons = (); my @ex_coords = (); my $acc_exons = decode_json($exon_json); my $exon_num = 1; my $last_end = 0; my $last_phase = 0; my $chrom = $acc_exons->{'gnCoordinate'}[0]{'genomicLocation'}{'chromosome'}; my $rev_strand = $acc_exons->{'gnCoordinate'}[0]{'genomicLocation'}{'reverseStrand'}; for my $exon ( @{$acc_exons->{'gnCoordinate'}[0]{'genomicLocation'}{'exon'}} ) { my ($p_begin, $p_end) = ($exon->{'proteinLocation'}{'begin'}{'position'},$exon->{'proteinLocation'}{'end'}{'position'}); my ($g_begin, $g_end) = ($exon->{'genomeLocation'}{'begin'}{'position'},$exon->{'genomeLocation'}{'end'}{'position'}); my $this_phase = 0; if (defined($g_begin) && defined($g_end)) { $this_phase = ($g_end - $g_begin + 1) % 3; } if (!defined($p_begin) || !defined($p_end)) { $exon_num++; $last_phase = 0; next; } if ($p_end >= $p_begin) { if ($p_begin == $last_end) { if ($last_phase==2) { $p_begin += 1; } elsif ($last_phase==1) { $last_end -= 1; $exons[-1]->{seq_end} -= 1; } } if ($p_begin <= $last_end && $p_end > $last_end) { $p_begin = $last_end+1; } $last_end = $p_end; $last_phase = $this_phase; my ($gs_begin, $gs_end) = ($g_begin, $g_end); if ($rev_strand) { ($gs_begin, $gs_end) = ($g_end, $g_begin); } push @exons, { ix=>$exon_num, start=>$p_begin, end=>$p_end, g_start=>$gs_begin, g_end=>$gs_end, chrom=>$chrom, }; $exon_num++; } } # check for domain overlap, and resolve check for domain overlap # (possibly more than 2 domains), choosing the domain with the best # evalue my @ex_feats = (); for my $exon_hr (@exons) { my $ix = $exon_hr->{ix}; if ($lav) { push @ex_feats, [$exon_hr->{start}, $exon_hr->{end}, "exon_$ix~$ix" ]; } else { my ($exon_info,$ex_info_start, $ex_info_end) = ("exon_$ix~$ix","",""); if ($gen_coord) { if (defined($exon_hr->{g_start})) { my $chr=$exon_hr->{chrom}; $chr = "unk" unless $chr; if ($chr =~ m/^\d+$/ || $chr =~m/^[XYZ]+$/) { $chr = "chr$chr"; } $ex_info_start = sprintf("exon_%d::%s:%d",$ix, $chr, $exon_hr->{g_start}); $ex_info_end = sprintf("exon_%d::%s:%d",$ix, $chr, $exon_hr->{g_end}); if ($exon_label) { $exon_info = sprintf("exon_%d{%s:%d-%d}~%d",$ix, $chr, $exon_hr->{g_start}, $exon_hr->{g_end},$ix); push @ex_feats, [$exon_hr->{start}, "-", $exon_hr->{end}, $exon_info]; } else { push @ex_feats, [$exon_hr->{start}, "-", $exon_hr->{end}, $exon_info]; push @ex_feats, [$exon_hr->{start},'<','-',$ex_info_start]; push @ex_feats, [$exon_hr->{end},'>','-',$ex_info_end]; } } } else { push @ex_feats, [$exon_hr->{start}, "-", $exon_hr->{end}, $exon_info]; } } } return \@ex_feats; } sub get_https { my ($url) = @_; my $result = ""; my $response = $ua->get($url); if ($response->is_success) { $result = $response->decoded_content; } else { $result = ''; } return $result; } __END__ =pod =head1 NAME ann_exons_up_sql.pl =head1 SYNOPSIS ann_exons_up_sql.pl --lav 'sp|P09488|GSTM1_NUMAN' | accession.file =head1 OPTIONS -h short help --help include description --gen_coord -- provide genomic exon start/stop coordinates as features --lav produce lav2plt.pl annotation format, only show domains/repeats --host, --user, --password, --port --db -- info for mysql database =head1 DESCRIPTION C extracts exon location information from a msyql database (default name, uniprot) built from EBI/proteins API data. Given a command line argument that contains a sequence accession (P09488) or identifier (GSTM1_HUMAN), the program looks up the features available for that sequence and returns them in a tab-delimited format: >sp|P09488|GSTM1_HUMAN 1 - 12 exon_1~1 13 - 38 exon_2~2 39 - 59 exon_3~3 60 - 87 exon_4~4 88 - 120 exon_5~5 121 - 152 exon_6~6 153 - 189 exon_7~7 190 - 218 exon_8~8 Calso provides genomic coordinates: >sp|P09488|GSTM1_HUMAN 1 - 12 exon_1~1 1 < - exon_1::chr1:109687874 12 > - exon_1::chr1:109687909 13 - 37 exon_2~2 13 < - exon_2::chr1:109688170 37 > - exon_2::chr1:109688245 38 - 59 exon_3~3 38 < - exon_3::chr1:109688673 59 > - exon_3::chr1:109688737 ... 190 - 218 exon_8~8 190 < - exon_8::chr1:109693206 218 > - exon_8::chr1:109693292 C is designed to be used by the B programs with the C<-V \!ann_exons_up_sql.pl> option, or by the C script. It can also be used with the lav2plt.pl program with the C<--xA "\!ann_exons_up_sql.pl --lav"> or C<--yA "\!ann_exons_up_sql.pl --lav"> options. =head1 AUTHOR William R. Pearson, wrp@virginia.edu =cut fasta36-36.3.8i_14-Nov-2020/scripts/ann_exons_up_www.pl000077500000000000000000000216261433453312700223230ustar00rootroot00000000000000#!/usr/bin/env perl ################################################################ # copyright (c) 2014,2015 by William R. Pearson and The Rector & # Visitors of the University of Virginia */ ################################################################ # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under this License is distributed on an "AS # IS" BASIS, WITHOUT WRRANTIES OR CONDITIONS OF ANY KIND, either # express or implied. See the License for the specific language # governing permissions and limitations under the License. ################################################################ # ann_exons_up_www.pl gets an annotation file from fasta36 -V with a # line of the form: # # sp|P09488|GSTM1_HUMAN218 # # and uses the EBI protein coordinate API to get the locations of exons # https://www.ebi.ac.uk/proteins/api/coordinates/P09488.json # # it must: # (1) read in the line # (2) parse it to get the acc # (3) get exon information from EBI/Uniprot # (4) return the tab delimited exon boundaries # 22-May-2017 -- use get("https://"), not get_https("https://"), because EBI does not have LWP::Protocol:https # 11-Dec-2018 -- modified to include --gen_coord, which reports exon starts and stops in genomic coordinates as <, > use warnings; use strict; use Getopt::Long; use LWP::Simple; use LWP::UserAgent; # use LWP::Protocol::https; use Pod::Usage; use JSON qw(decode_json); use vars qw($host $db $port $user $pass); my ($lav, $gen_coord, $shelp, $help) = (0, 0, 0, 0); my $color_sep_str = " :"; $color_sep_str = '~'; GetOptions( "gen_coord!" => \$gen_coord, "lav" => \$lav, "h|?" => \$shelp, "help" => \$help, ); pod2usage(1) if $shelp; pod2usage(exitstatus => 0, verbose => 2) if $help; pod2usage(1) unless (@ARGV || -p STDIN || -f STDIN); my %domains = (NODOM=>0); my @domain_list = (0); my $domain_cnt = 0; my ($tmp, $gi, $sdb, $acc, $id, $use_acc); my $get_annot_sub = \&get_up_www_exons; my $ua = LWP::UserAgent->new(ssl_opts=>{verify_hostname => 0}); my $uniprot_url = 'https://www.ebi.ac.uk/proteins/api/coordinates/'; my $uniprot_suff = ".json"; # get the query my ($query, $seq_len) = @ARGV; $seq_len = 0 unless defined($seq_len); $query =~ s/^>// if ($query); my @annots = (); my %annot_set = (); # re-use annotations if they are available (not yet implemented) #if it's a file I can open, read and parse it # unless ($query && ($query =~ m/[\|:]/ || # $query =~ m/^[OPQ][0-9][A-Z0-9]{3}[0-9]|[A-NR-Z][0-9]([A-Z][A-Z0-9]{2}[0-9]){1,2}\s/)) { if (! $query || -r $query) { while (my $a_line = <>) { $a_line =~ s/^>//; chomp $a_line; push @annots, show_annots($a_line, $get_annot_sub); } } else { push @annots, show_annots("$query\t$seq_len", $get_annot_sub); } for my $seq_annot (@annots) { print ">",$seq_annot->{seq_info},"\n"; for my $annot (@{$seq_annot->{list}}) { print join("\t",@$annot),"\n"; } } exit(0); sub show_annots { my ($query_len, $get_annot_sub) = @_; my ($annot_line, $seq_len) = split(/\t/,$query_len); my %annot_data = (seq_info=>$annot_line); $use_acc = 1; if ($annot_line =~ m/^gi\|/) { ($tmp, $gi, $sdb, $acc, $id) = split(/\|/,$annot_line); } elsif ($annot_line =~ m/^(sp|tr|up)\|/) { ($sdb, $acc, $id) = split(/\|/,$annot_line); } elsif ($annot_line =~ m/^(SP|TR):(\w+) (\w+)/) { ($sdb, $id, $acc) = (lc($1), $2, $3); } elsif ($annot_line =~ m/^(SP|TR):(\w+)/) { ($sdb, $id, $acc) = (lc($1), $2, ""); warn "*** $0 - accession required: $annot_line"; } elsif ($annot_line =~ m/\|/) { ($sdb, $acc) = split(/\|/,$annot_line); } else { ($acc) = ($annot_line =~ m/^(\S+)/); } $acc =~ s/\.\d+$//; # my $exon_json = get_https($uniprot_url.$acc.$uniprot_suff); my $exon_json = get($uniprot_url.$acc.$uniprot_suff); unless (!$exon_json || $exon_json =~ m/errorMessage/ || $exon_json =~ m/Can not find/) { $annot_data{list} = parse_json_up_exons($exon_json); } return \%annot_data; } sub parse_json_up_exons { my ($exon_json) = @_; my @exons = (); my @ex_coords = (); my $acc_exons = decode_json($exon_json); my $exon_num = 1; my $last_end = 0; my $last_phase = 0; my $chrom = $acc_exons->{'gnCoordinate'}[0]{'genomicLocation'}{'chromosome'}; my $rev_strand = $acc_exons->{'gnCoordinate'}[0]{'genomicLocation'}{'reverseStrand'}; for my $exon ( @{$acc_exons->{'gnCoordinate'}[0]{'genomicLocation'}{'exon'}} ) { my ($p_begin, $p_end) = ($exon->{'proteinLocation'}{'begin'}{'position'},$exon->{'proteinLocation'}{'end'}{'position'}); my ($g_begin, $g_end) = ($exon->{'genomeLocation'}{'begin'}{'position'},$exon->{'genomeLocation'}{'end'}{'position'}); my $this_phase = 0; if (defined($g_begin) && defined($g_end)) { $this_phase = ($g_end - $g_begin + 1) % 3; } if (!defined($p_begin) || !defined($p_end)) { $exon_num++; $last_phase = 0; next; } if ($p_end >= $p_begin) { if ($p_begin == $last_end) { if ($last_phase==2) { $p_begin += 1; } elsif ($last_phase==1) { $last_end -= 1; $exons[-1]->{seq_end} -= 1; } } if ($p_begin <= $last_end && $p_end > $last_end) { $p_begin = $last_end+1; } $last_end = $p_end; $last_phase = $this_phase; my $info ="exon_".$exon_num.$color_sep_str.$exon_num; my ($gs_begin, $gs_end) = ($g_begin, $g_end); if ($rev_strand) { ($gs_begin, $gs_end) = ($g_end, $g_begin); } push @exons, { info=>$info, exon_num=>$exon_num, seq_start=>$p_begin, seq_end=>$p_end, gen_seq_start=>$gs_begin, gen_seq_end=>$gs_end, chrom=>$chrom, }; $exon_num++; } } # check for domain overlap, and resolve check for domain overlap # (possibly more than 2 domains), choosing the domain with the best # evalue my @ex_feats = (); for my $d_ref (@exons) { if ($lav) { push @ex_feats, [$d_ref->{seq_start}, $d_ref->{seq_end}, $d_ref->{info}]; } else { push @ex_feats, [$d_ref->{seq_start}, '-', $d_ref->{seq_end}, $d_ref->{info} ]; if ($gen_coord) { my $chr=$d_ref->{chrom}; if ($chr =~ m/^\d+$/ || $chr =~m/^[XYZ]+$/) { $chr = "chr$chr"; } my $ex_info = sprintf("exon_%d::%s:%d",$d_ref->{exon_num}, $chr, $d_ref->{gen_seq_start}); push @ex_feats, [$d_ref->{seq_start},'<','-',$ex_info]; $ex_info = sprintf("exon_%d::%s:%d",$d_ref->{exon_num}, $chr, $d_ref->{gen_seq_end}); push @ex_feats, [$d_ref->{seq_end},'>','-',$ex_info]; } } } return \@ex_feats; } sub get_https { my ($url) = @_; my $result = ""; my $response = $ua->get($url); if ($response->is_success) { $result = $response->decoded_content; } else { $result = ''; } return $result; } __END__ =pod =head1 NAME ann_exons_up_www.pl =head1 SYNOPSIS ann_exons_up_www.pl 'sp|P09488|GSTM1_HUMAN' | accession.file =head1 OPTIONS -h short help --help include description --gen_coord -- provide genomic exon start/stop coordinates as features --lav produce lav2plt.pl annotation format, only show domains/repeats --host, --user, --password, --port --db -- info for mysql database =head1 DESCRIPTION C extracts exon location information from a msyql database (default name, uniprot) built from EBI/proteins API data. Given a command line argument that contains a sequence accession (P09488) or identifier (GSTM1_HUMAN), the program looks up the features available for that sequence and returns them in a tab-delimited format: C: >sp|P09488|GSTM1_HUMAN 1 - 12 exon_1~1 13 - 37 exon_2~2 38 - 59 exon_3~3 60 - 86 exon_4~4 87 - 120 exon_5~5 121 - 152 exon_6~6 153 - 189 exon_7~7 190 - 218 exon_8~8 C also provides genomic coordinates: >sp|P09488|GSTM1_HUMAN 1 - 12 exon_1~1 1 < - exon_1::chr1:109687874 12 > - exon_1::chr1:109687909 13 - 37 exon_2~2 13 < - exon_2::chr1:109688170 37 > - exon_2::chr1:109688245 ... 190 - 218 exon_8~8 190 < - exon_8::chr1:109693206 218 > - exon_8::chr1:109693292 C provides genomic coordinates on a single line: >sp|P09488|GSTM1_HUMAN 1 - 12 exon_1{chr1:109687874-109687909}~1 13 - 37 exon_2{chr1:109688170-109688245}~2 ... 153 - 189 exon_7{chr1:109690454-109690564}~7 190 - 218 exon_8{chr1:109693206-109693292}~8 C is designed to be used by the B programs with the C<-V \!ann_exons_up_www.pl> option, or by the C script. It can also be used with the lav2plt.pl program with the C<--xA "\!ann_exons_up_www.pl --lav"> or C<--yA "\!ann_exons_up_www.pl --lav"> options. =head1 AUTHOR William R. Pearson, wrp@virginia.edu =cut fasta36-36.3.8i_14-Nov-2020/scripts/ann_feats2ipr.pl000077500000000000000000000371011433453312700214510ustar00rootroot00000000000000#!/usr/bin/env perl ################################################################ # copyright (c) 2014 by William R. Pearson and The Rector & # Visitors of the University of Virginia */ ################################################################ # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under this License is distributed on an "AS # IS" BASIS, WITHOUT WRRANTIES OR CONDITIONS OF ANY KIND, either # express or implied. See the License for the specific language # governing permissions and limitations under the License. ################################################################ # ann_feats2ipr.pl gets an annotation file from fasta36 -V with a line of the form: # gi|62822551|sp|P00502|GSTA1_RAT Glutathione S-transfer\n (at least from pir1.lseg) # # it must: # (1) read in the line # (2) parse it to get the up_acc # (3) return the tab delimited features # # this version takes "features:" # ACT_SITE, MOD_RES, SITE, METAL, VARIANT, MUTAGEN # from Uniprot and combines them with domain annotations from my merge of the Interpro database. # # ann_feats2ipr.pl is largely identical to ann_feats2l.pl, except that # it uses Interpro for domain/repeat information. use warnings; use strict; use DBI; use Getopt::Long; use Pod::Usage; use vars qw($host $db $dom_db $a_table $port $user $pass); my %domains = (); my $domain_cnt = 0; my $hostname = `/bin/hostname`; unless ($hostname =~ m/ebi/) { ($host, $db, $a_table, $port, $user, $pass) = ("wrpxdb.its.virginia.edu", "uniprot", "annot2", 0, "web_user", "fasta_www"); # $host = 'localhost'; } else { ($host, $db, $a_table, $port, $user, $pass) = ("mysql-pearson-prod", "up_db", "annot", 4124, "web_user", "fasta_www"); } my ($lav, $neg_doms, $no_doms, $no_feats, $no_label, $use_ipr, $acc_comment, $shelp, $help, $no_mod, $dom_db, $db_ref_acc) = (0,0,0,0,0,0,0,0,0,0,0,0); my $color_sep_str = " :"; $color_sep_str = '~'; GetOptions( "host=s" => \$host, "db=s" => \$db, "user=s" => \$user, "password=s" => \$pass, "port=i" => \$port, "lav" => \$lav, "no_mod" => \$no_mod, "no-mod" => \$no_mod, "no-doms" => \$no_doms, "nodoms" => \$no_doms, "dom_db=s" => \$dom_db, "dom_acc" => \$db_ref_acc, "dom-acc" => \$db_ref_acc, "neg" => \$neg_doms, "neg_doms" => \$neg_doms, "neg-doms" => \$neg_doms, "negdoms" => \$neg_doms, "no_feats" => \$no_feats, "no-feats" => \$no_feats, "nofeats" => \$no_feats, "no_label" => \$no_label, "no-label" => \$no_label, "nolabel" => \$no_label, "ipr" => \$use_ipr, "acc_comment" => \$acc_comment, "h|?" => \$shelp, "help" => \$help, ); pod2usage(1) if $shelp; pod2usage(exitstatus => 0, verbose => 2) if $help; pod2usage(1) unless (-p STDIN || -f STDIN || @ARGV); my $connect = "dbi:mysql(AutoCommit=>1,RaiseError=>1):database=$db"; $connect .= ";host=$host" if $host; $connect .= ";port=$port" if $port; my $dbh = DBI->connect($connect, $user, $pass ) or die $DBI::errstr; my @feat_keys = qw(ACT_SITE MOD_RES BINDING SITE METAL VARIANT MUTAGEN); my @feat_vals = ( '=','*','#','^','!','V','V'); my @feat_text = ( "active site", "phosphorylation", "binding site", "site", "metal binding"); my @dom_vals = ( [ '[', ']'],[ '[', ']']); my %annot_types = (); @annot_types{@feat_keys} = @feat_vals; my $get_annot_sub = \&get_fasta_annots; if ($lav) { $no_feats = 1; $get_annot_sub = \&get_lav_annots; } if ($neg_doms) { $domains{'NODOM'}=0; } if ($no_mod) { @feat_keys = qw(ACT_SITE BINDING SITE METAL); @feat_text = ( "active site", "binding site", "site", "metal binding"); @feat_vals = ( '=','#','^','!'); delete($annot_types{'MOD_RES'}); delete($annot_types{'MUTAGEN'}); delete($annot_types{'VARIANT'}); } my $get_ft2_sites_id = $dbh->prepare(qq(select acc, pos, end, label, value, len from features2 join $a_table using(acc) where id=? and label in ('ACT_SITE','MOD_RES','BINDING','SITE','METAL','VARIANT','MUTAGEN') order by pos)); my $get_ft2_sites_acc = $dbh->prepare(qq(select acc, pos, end, label, value, len from features2 join $a_table using(acc) where acc=? and label in ('ACT_SITE','MOD_RES','BINDING','SITE','METAL','VARIANT','MUTAGEN') order by pos)); my $get_ft2_sites_refacc= $dbh->prepare(qq(select ref_acc, pos, end, label, value, len from features2 join $a_table using(acc) where ref_acc=? and label in ('ACT_SITE','MOD_RES','BINDING','SITE','METAL','VARIANT','MUTAGEN') order by pos)); my $get_ipr_doms_id = $dbh->prepare(qq(select acc, start, stop, ipr_acc, db_ref, s_descr, len from prot2ipr_s join $a_table using(acc) join ipr_annot using(ipr_acc) where id=? order by start)); my $get_ipr_domdb_id = $dbh->prepare(qq(select acc, start, stop, ipr_acc, db_ref, s_descr, len from prot2ipr join $a_table using(acc) join ipr_annot using(ipr_acc) where dom_db='$dom_db' AND id=? order by start)); my $get_ipr_doms_acc = $dbh->prepare(qq(select acc, start, stop, ipr_acc, db_ref, s_descr, len from prot2ipr_s join $a_table using(acc) join ipr_annot using(ipr_acc) where acc=? order by start)); my $get_ipr_doms_refacc = $dbh->prepare(qq(select ref_acc, start, stop, ipr_acc, db_ref, s_descr, len from prot2ipr_s join $a_table using(acc) join ipr_annot using(ipr_acc) where ref_acc=? order by start)); my $get_ipr_domdb_acc = $dbh->prepare(qq(select acc, start, stop, ipr_acc, db_ref, s_descr, len from prot2ipr join $a_table using(acc) join ipr_annot using(ipr_acc) where dom_db='$dom_db' AND acc=? order by start)); my $get_sites_sql = $get_ft2_sites_id; my $get_doms_sql = $get_ipr_doms_id; my ($tmp, $gi, $sdb, $acc, $id, $use_acc); unless ($no_feats || $no_label) { for my $i ( 0 .. $#feat_text ) { print "=",$feat_vals[$i],":",$feat_text[$i],"\n"; } # print "=*:phosphorylation\n"; # print "==".":active site\n"; # print "=@".":site\n"; # print "=^:binding\n"; # print "=!:metal binding\n"; } # get the query my ($query, $seq_len) = @ARGV; $seq_len = 0 unless defined($seq_len); $query =~ s/^>// if $query; my @annots = (); #if it's a file I can open, read and parse it # unless ($query && ($query =~ m/[\|:]/ || # $query =~ m/^[NX]P_/ || # $query =~ m/^[OPQ][0-9][A-Z0-9]{3}[0-9]|[A-NR-Z][0-9]([A-Z][A-Z0-9]{2}[0-9]){1,2}\s/)) { if (! $query || -r $query) { while (my $a_line = <>) { $a_line =~ s/^>//; chomp $a_line; my $annots_ref = show_annots($a_line, $get_annot_sub); push @annots, $annots_ref if ($annots_ref); } } else { my $annots_ref = show_annots("$query\t$seq_len", $get_annot_sub); push @annots, $annots_ref if ($annots_ref); } for my $seq_annot (@annots) { print ">",$seq_annot->{seq_info},"\n"; for my $annot (@{$seq_annot->{list}}) { if (!$lav && defined($domains{$annot->[4]})) { $annot->[-2] .= $color_sep_str.$domains{$annot->[4]}; } if ($lav) { print join("\t",@$annot[0 .. 2]),"\n"; } else { print join("\t",@$annot[0 .. 3]),"\n"; } } } exit(0); sub show_annots { my ($query_length, $get_annot_sub) = @_; my ($annot_line, $seq_length) = split(/\t/,$query_length); my %annot_data = (seq_info=>$annot_line); if ($annot_line =~ m/^gi\|/ && $annot_line =~ m/\|[sp|ref]\|/) { $use_acc = 1; ($tmp, $gi, $sdb, $acc, $id) = split(/\|/,$annot_line); if ($sdb !~ m/sp/ && $annot_line =~ m/\|sp\|(\w+)/) { ($acc) = ($annot_line =~ m/\|sp\|(\w+)/); } } elsif ($annot_line =~ m/^[sp|tr|ref|up]\|/ ) { $use_acc = 1; ($sdb, $acc) = split(/\|/,$annot_line); } elsif ($annot_line =~ m/^gi\|/) { $use_acc = 1; ($tmp, $gi, $sdb, $acc, $id) = split(/\|/,$annot_line); } elsif ($annot_line =~ m/^(SP|TR):(\w+) (\w+)/) { $use_acc = 1; ($sdb, $id, $acc) = ($1,$2,$3); $sdb = lc($sdb) } elsif ($annot_line =~ m/^(SP|TR):(\w+)/) { $use_acc = 0; ($sdb, $id, $acc) = ($1,$2,""); $sdb = lc($sdb) } elsif ($annot_line =~ m/\|/) { # new NCBI swissprot format $use_acc = 1; ($sdb, $acc, $id) = split(/\|/,$annot_line); } else { $use_acc = 1; $sdb = 'sp'; ($acc) = split(/\s+/,$annot_line); } # remove version number unless ($use_acc) { unless ($no_feats) { $get_sites_sql = $get_ft2_sites_id; $get_sites_sql->execute($id); } unless ($no_doms) { if ($dom_db) { $get_doms_sql = $get_ipr_domdb_id; } else { $get_doms_sql = $get_ipr_doms_id; } $get_doms_sql->execute($id); } } else { unless ($acc) { print STDERR "ann_feats2ipr.pl no acc: $annot_line\n"; return 0; } $acc =~ s/\.\d+$//; if ($sdb eq 'ref') { unless ($no_feats) { $get_sites_sql = $get_ft2_sites_refacc; $get_sites_sql->execute($acc); } unless ($no_doms) { $get_doms_sql = $get_ipr_doms_refacc; $get_doms_sql->execute($acc); } } else { unless ($no_feats) { $get_sites_sql = $get_ft2_sites_acc; $get_sites_sql->execute($acc); } unless ($no_doms) { if ($dom_db) { $get_doms_sql = $get_ipr_domdb_acc; } else { $get_doms_sql = $get_ipr_doms_acc; } $get_doms_sql->execute($acc); } } } $annot_data{list} = $get_annot_sub->($seq_length, $get_sites_sql, $get_doms_sql); return \%annot_data; } sub get_fasta_annots { my ($seq_len, $get_sites_sql, $get_doms_sql) = @_; my ($acc, $pos, $end, $label, $value, $comment, $len); $seq_len = 0; my @feats2 = (); # features with start/stop, for checking overlap, adding negative my @sites = (); # sites with one position # get sites unless ($no_feats) { while (($acc, $pos, $end, $label, $value, $len) = $get_sites_sql->fetchrow_array()) { $seq_len = $len if ($len > $seq_len); next unless $annot_types{$label}; if ($label =~ m/VARIANT/) { my ($aa_res, $comment) = split(/\(/,$value); if ($comment) { $comment =~ s/\)//; # remove the /FTId=VAR_014497 information $comment =~ s/\s+\/FTId=.*$//; } else { $comment = ""; } next if ($comment =~ /MISSING/); my ($vfrom, $vto) = ($aa_res =~ m/(\w)\s*->\s*(\w)/); if ($vto) { $comment = '' unless $comment; $value = $vto; push @sites, [$pos, $annot_types{$label}, $value, $comment, ""]; } } elsif ($label =~ m/MUTAGEN/) { my ($aa_res, $comment) = split(/: /,$value); next if ($comment =~ /MISSING/); my ($vfrom, $vto) = split(/\->/,$aa_res); if ($vto) { my @vto_list = split(/,/,$vto); $value = $vto; for my $val ( @vto_list) { push @sites, [$pos, $annot_types{$label}, $val, "Mutagen: $comment", ""]; } } } else { push @sites, [$pos, $annot_types{$label}, "-", "$label: $value", ""]; } } } unless ($no_doms) { my ($ipr_acc, $db_ref, $s_descr) = ("","",""); while (($acc, $pos, $end, $ipr_acc, $db_ref, $s_descr, $len) = $get_doms_sql->fetchrow_array()) { $db_ref =~ s/G3DSA://; $seq_len = $len unless ($seq_len > $len); $value = domain_name($ipr_acc, $s_descr); if ($acc_comment) { $value .= "{$ipr_acc}"; } if ($db_ref_acc) { $value = $db_ref; } elsif ($use_ipr) { $value = $ipr_acc; } push @feats2, [$pos, "-", $end, $value, $ipr_acc]; } } # ensure that domains do not overlap for (my $i=1; $i < scalar(@feats2); $i++) { my $diff = $feats2[$i-1]->[2] - $feats2[$i]->[0]; if ($diff >= 0) { $feats2[$i-1]->[2] = $feats2[$i]->[0]+ int($diff/2); $feats2[$i]->[0] = $feats2[$i-1]->[2] + 1; } } my @n_feats2 = (); if ($neg_doms) { my $last_end = 0; for my $feat ( @feats2 ) { if ($feat->[0] - $last_end > 10) { push @n_feats2, [$last_end+1, "-", $feat->[0]-1, "NODOM", "NODOM"]; } $last_end = $feat->[2]; } if ($seq_len - $last_end > 10) { push @n_feats2, [$last_end+1, "-", $seq_len, "NODOM", "NODOM"]; } } my @feats = (); for my $feat (@feats2, @n_feats2) { push @feats, [$feat->[0], '[', '-', $feat->[-2], $feat->[-1] ]; push @feats, [$feat->[2], ']', '-', "", ""]; } @feats = sort { $a->[0] <=> $b->[0] } (@sites, @feats); return \@feats; } sub get_lav_annots { my ($seq_len, $get_sites_sql, $get_doms_sql) = @_; my @feats = (); my %annot = (); while (my ($acc, $pos, $end, $ipr_acc, $db_ref, $s_descr, $len) = $get_doms_sql->fetchrow_array()) { # $value = domain_name($label,$value); my $value = domain_name($ipr_acc,$s_descr); push @feats, [$pos, $end, $value]; } return \@feats; } # domain name takes a uniprot domain label, removes comments ( ; # truncated) and numbers and returns a canonical form. Thus: # Cortactin 6. # Cortactin 7; truncated. # becomes "Cortactin" # sub domain_name { my ($ipr_acc, $s_descr) = @_; $s_descr =~ s/[\-_]domain//; $s_descr =~ s/[\-_]homology//; $s_descr =~ s/^(.{20})/$1/; if (!defined($domains{$ipr_acc})) { $domain_cnt++; $domains{$ipr_acc} = $domain_cnt; } return $s_descr; } __END__ =pod =head1 NAME ann_feats2.pl =head1 SYNOPSIS ann_feats2.pl --no_doms --no_feats --lav 'sp|P09488|GSTM1_NUMAN' | accession.file =head1 OPTIONS -h short help --help include description --acc_comment provide the InterPro accession in {IPR00123} brackets for links --dom_db=G3DSA use a single domain database (e.g. PF, G3DSA, PS5) from InterPro --dom_acc provide the domain accession, not the description, as the domain label --neg, --neg_doms, --neg-doms label non-domain regions > 10 residues as "NODOM" --ipr proide InterPro accession as label --no-doms do not show domain boundaries (domains are always shown with --lav) --no-feats do not show feature (variants, active sites, phospho-sites) --no-label do show feature key (==*phosphorylation, etc) --lav produce lav2plt.pl annotation format, only show domains/repeats --host, --user, --password, --port --db -- info for mysql database =head1 DESCRIPTION C extracts feature, domain, and repeat information from two msyql databases (default names: uniprot/ipr2) built by parsing the uniprot_sprot.dat and uniprot_trembl.dat feature tables. Given a command line argument that contains a sequence accession (P09488) or identifier (GSTM1_HUMAN), the program looks up the features available for that sequence and returns them in a tab-delimited format: >sp|P09488 2 - 88 DOMAIN: GST N-terminal. 7 V F Mutagen: Reduces catalytic activity 100- fold. 23 * - MOD_RES: Phosphotyrosine (By similarity). 33 * - MOD_RES: Phosphotyrosine (By similarity). 34 * - MOD_RES: Phosphothreonine (By similarity). 90 - 208 DOMAIN: GST C-terminal. 108 V S Mutagen: Changes the properties of the enzyme toward some substrates. 108 V Q Mutagen: Reduces catalytic activity by half. 109 V I Mutagen: Reduces catalytic activity by half. 116 # - BINDING: Substrate. 116 V A Mutagen: Reduces catalytic activity 10-fold. 116 V F Mutagen: Slight increase of catalytic activity. 173 V N in allele GSTM1B; dbSNP:rs1065411. 210 V T in dbSNP:rs449856. If features are provided, then a legend of feature symbols is provided as well (disabled with C<--no-label>): =*:phosphorylation ==:active site =@:site =^:binding =!:metal binding If the C<--lav> option is specified, domain and repeat features are presented in a different format for the C program: >sp|P09488|GSTM1_HUMAN 2 88 GST N-terminal. 90 208 GST C-terminal. C is designed to be used by the B programs with the C<-V \!ann_feats2.pl> option. It can also be used with the lav2plt.pl program with the C<--xA "\!ann_feats2.pl --lav"> or C<--yA "\!ann_feats2.pl --lav"> options. =head1 AUTHOR William R. Pearson, wrp@virginia.edu =cut fasta36-36.3.8i_14-Nov-2020/scripts/ann_feats2ipr_e.pl000077500000000000000000000372001433453312700217550ustar00rootroot00000000000000#!/usr/bin/env perl ################################################################ # copyright (c) 2014 by William R. Pearson and The Rector & # Visitors of the University of Virginia */ ################################################################ # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under this License is distributed on an "AS # IS" BASIS, WITHOUT WRRANTIES OR CONDITIONS OF ANY KIND, either # express or implied. See the License for the specific language # governing permissions and limitations under the License. ################################################################ # ann_feats2ipr.pl gets an annotation file from fasta36 -V with a line of the form: # gi|62822551|sp|P00502|GSTA1_RAT Glutathione S-transfer\n (at least from pir1.lseg) # # it must: # (1) read in the line # (2) parse it to get the up_acc # (3) return the tab delimited features # # this version takes "features:" # ACT_SITE, MOD_RES, SITE, METAL, VARIANT, MUTAGEN # from Uniprot and combines them with domain annotations from my merge of the Interpro database. # # ann_feats2ipr.pl is largely identical to ann_feats2l.pl, except that # it uses Interpro for domain/repeat information. use warnings; use strict; use DBI; use Getopt::Long; use Pod::Usage; use vars qw($host $db $dom_db $a_table $port $user $pass); my %domains = (); my $domain_cnt = 0; my $hostname = `/bin/hostname`; unless ($hostname =~ m/ebi/) { ($host, $db, $a_table, $port, $user, $pass) = ("wrpxdb.its.virginia.edu", "uniprot", "annot2", 0, "web_user", "fasta_www"); # $host = 'xdb'; } else { ($host, $db, $a_table, $port, $user, $pass) = ("mysql-pearson-prod", "up_db", "annot", 4124, "web_user", "fasta_www"); } my ($lav, $neg_doms, $no_doms, $no_feats, $no_label, $use_ipr, $acc_comment, $shelp, $help, $no_mod, $dom_db, $db_ref_acc, $bound_comment) = (0,0,0,0,0,0,0,0,0,0,0,0,0); my ($show_color, $color_sep_str) = (1," :"); $color_sep_str = '~'; GetOptions( "host=s" => \$host, "db=s" => \$db, "user=s" => \$user, "password=s" => \$pass, "port=i" => \$port, "lav" => \$lav, "bound_comment" => \$bound_comment, "color!" => \$show_color, "no_mod" => \$no_mod, "no-mod" => \$no_mod, "no-doms" => \$no_doms, "nodoms" => \$no_doms, "dom_db=s" => \$dom_db, "dom_acc" => \$db_ref_acc, "dom-acc" => \$db_ref_acc, "neg" => \$neg_doms, "neg_doms" => \$neg_doms, "neg-doms" => \$neg_doms, "negdoms" => \$neg_doms, "no_feats" => \$no_feats, "no-feats" => \$no_feats, "nofeats" => \$no_feats, "no_label" => \$no_label, "no-label" => \$no_label, "nolabel" => \$no_label, "ipr" => \$use_ipr, "acc_comment" => \$acc_comment, "h|?" => \$shelp, "help" => \$help, ); pod2usage(1) if $shelp; pod2usage(exitstatus => 0, verbose => 2) if $help; pod2usage(1) unless (-p STDIN || -f STDIN || @ARGV); my $connect = "dbi:mysql(AutoCommit=>1,RaiseError=>1):database=$db"; $connect .= ";host=$host" if $host; $connect .= ";port=$port" if $port; my $dbh = DBI->connect($connect, $user, $pass ) or die $DBI::errstr; my @feat_keys = qw(ACT_SITE MOD_RES BINDING SITE METAL VARIANT MUTAGEN); my @feat_vals = ( '=','*','#','^','!','V','V'); my @feat_text = ( "active site", "phosphorylation", "binding site", "site", "metal binding"); my %annot_types = (); @annot_types{@feat_keys} = @feat_vals; my $get_annot_sub = \&get_fasta_annots; if ($lav) { $no_feats = 1; $get_annot_sub = \&get_lav_annots; } if ($neg_doms) { $domains{'NODOM'}=0; } if ($no_mod) { @feat_keys = qw(ACT_SITE BINDING SITE METAL); @feat_text = ( "active site", "binding site", "site", "metal binding"); @feat_vals = ( '=','#','^','!'); delete($annot_types{'MOD_RES'}); delete($annot_types{'MUTAGEN'}); delete($annot_types{'VARIANT'}); } my $get_ft2_sites_id = $dbh->prepare( <prepare( <prepare( <prepare(qq(select acc, start, stop, ipr_acc, db_ref, s_descr, len from prot2ipr_s join $a_table using(acc) join ipr_annot using(ipr_acc) where id=? order by start)); my $get_ipr_domdb_id = $dbh->prepare(qq(select acc, start, stop, ipr_acc, db_ref, s_descr, len from prot2ipr join $a_table using(acc) join ipr_annot using(ipr_acc) where dom_db='$dom_db' AND id=? order by start)); my $get_ipr_doms_acc = $dbh->prepare(qq(select acc, start, stop, ipr_acc, db_ref, s_descr, len from prot2ipr_s join $a_table using(acc) join ipr_annot using(ipr_acc) where acc=? order by start)); my $get_ipr_doms_refacc = $dbh->prepare(qq(select ref_acc, start, stop, ipr_acc, db_ref, s_descr, len from prot2ipr_s join $a_table using(acc) join ipr_annot using(ipr_acc) where ref_acc=? order by start)); my $get_ipr_domdb_acc = $dbh->prepare(qq(select acc, start, stop, ipr_acc, db_ref, s_descr, len from prot2ipr join $a_table using(acc) join ipr_annot using(ipr_acc) where dom_db='$dom_db' AND acc=? order by start)); my $get_sites_sql = $get_ft2_sites_id; my $get_doms_sql = $get_ipr_doms_id; my ($tmp, $gi, $sdb, $acc, $id, $use_acc); unless ($no_feats || $no_label) { for my $i ( 0 .. $#feat_text ) { print "=",$feat_vals[$i],":",$feat_text[$i],"\n"; } # print "=*:phosphorylation\n"; # print "==".":active site\n"; # print "=@".":site\n"; # print "=^:binding\n"; # print "=!:metal binding\n"; } # get the query my ($query, $seq_len) = @ARGV; $seq_len = 0 unless defined($seq_len); $query =~ s/^>// if ($query); my @annots = (); #if it's a file I can open, read and parse it # unless ($query && $query =~ m/[\|:]/ ) { if (! $query || -r $query) { while (my $a_line = <>) { $a_line =~ s/^>//; chomp $a_line; my $annots_ref = show_annots($a_line, $get_annot_sub); push @annots, $annots_ref if ($annots_ref); } } else { my $annots_ref = show_annots("$query\t$seq_len", $get_annot_sub); push @annots, $annots_ref if ($annots_ref); } for my $seq_annot (@annots) { print ">",$seq_annot->{seq_info},"\n"; for my $annot (@{$seq_annot->{list}}) { if (!$lav && defined($domains{$annot->[4]})) { if ($bound_comment) { $annot->[-2] .= $color_sep_str.$annot->[0].":".$annot->[2]; } elsif ($show_color) { $annot->[-2] .= $color_sep_str.$domains{$annot->[4]}; } } if ($lav) { print join("\t",@$annot[0 .. 2]),"\n"; } else { print join("\t",@$annot[0 .. 3]),"\n"; } } } exit(0); sub show_annots { my ($query_length, $get_annot_sub) = @_; my ($annot_line, $seq_length) = split(/\t/,$query_length); my %annot_data = (seq_info=>$annot_line); if ($annot_line =~ m/^gi\|/ && $annot_line =~ m/\|[sp|ref]\|/) { $use_acc = 1; ($tmp, $gi, $sdb, $acc, $id) = split(/\|/,$annot_line); if ($sdb !~ m/sp/ && $annot_line =~ m/\|sp\|(\w+)/) { ($acc) = ($annot_line =~ m/\|sp\|(\w+)/); } } elsif ($annot_line =~ m/^[sp|tr|ref]\|/ ) { $use_acc = 1; ($sdb, $acc) = split(/\|/,$annot_line); } elsif ($annot_line =~ m/^gi\|/) { $use_acc = 1; ($tmp, $gi, $sdb, $acc, $id) = split(/\|/,$annot_line); } elsif ($annot_line =~ m/^(SP|TR):(\w+) (\w+)/) { ($sdb, $id, $acc) = ($1,$2,$3); $use_acc = 1; $sdb = lc($sdb) } elsif ($annot_line =~ m/^(SP|TR):(\w+)/) { ($sdb, $id, $acc) = ($1,$2,""); $use_acc = 0; $sdb = lc($sdb) } elsif ($annot_line !~ m/\|/) { # new NCBI swissprot format $use_acc =1; $sdb = 'sp'; ($acc) = split(/\s+/,$annot_line); } else { $use_acc = 1; ($sdb, $acc, $id) = split(/\|/,$annot_line); } # remove version number unless ($use_acc) { unless ($no_feats) { $get_sites_sql = $get_ft2_sites_id; $get_sites_sql->execute($id); } unless ($no_doms) { if ($dom_db) { $get_doms_sql = $get_ipr_domdb_id; } else { $get_doms_sql = $get_ipr_doms_id; } $get_doms_sql->execute($id); } } else { unless ($acc) { print STDERR "ann_feats2ipr.pl no acc: $annot_line\n"; return 0; } $acc =~ s/\.\d+$//; if ($sdb eq 'ref') { unless ($no_feats) { $get_sites_sql = $get_ft2_sites_refacc; $get_sites_sql->execute($acc); } unless ($no_doms) { $get_doms_sql = $get_ipr_doms_refacc; $get_doms_sql->execute($acc); } } else { unless ($no_feats) { $get_sites_sql = $get_ft2_sites_acc; $get_sites_sql->execute($acc); } unless ($no_doms) { if ($dom_db) { $get_doms_sql = $get_ipr_domdb_acc; } else { $get_doms_sql = $get_ipr_doms_acc; } $get_doms_sql->execute($acc); } } } $annot_data{list} = $get_annot_sub->($seq_length, $get_sites_sql, $get_doms_sql); return \%annot_data; } sub get_fasta_annots { my ($seq_len, $get_sites_sql, $get_doms_sql) = @_; my ($acc, $pos, $end, $label, $value, $comment, $len); $seq_len = 0; my @feats2 = (); # features with start/stop, for checking overlap, adding negative my @sites = (); # sites with one position # get sites unless ($no_feats) { while (($acc, $pos, $end, $label, $value, $len) = $get_sites_sql->fetchrow_array()) { $seq_len = $len if ($len > $seq_len); next unless $annot_types{$label}; if ($label =~ m/VARIANT/) { my ($aa_res, $comment) = split(/\(/,$value); if ($comment) { $comment =~ s/\)//; # remove the /FTId=VAR_014497 information $comment =~ s/\s+\/FTId=.*$//; } else { $comment = ""; } next if ($comment =~ /MISSING/); my ($vfrom, $vto) = ($aa_res =~ m/(\w)\s*->\s*(\w)/); if ($vto) { $comment = '' unless $comment; $value = $vto; push @sites, [$pos, $annot_types{$label}, $value, $comment, ""]; } } elsif ($label =~ m/MUTAGEN/) { my ($aa_res, $comment) = split(/: /,$value); next if ($comment =~ /MISSING/); my ($vfrom, $vto) = split(/\->/,$aa_res); if ($vto) { my @vto_list = split(/,/,$vto); $value = $vto; for my $val ( @vto_list) { push @sites, [$pos, $annot_types{$label}, $val, "Mutagen: $comment", ""]; } } } else { push @sites, [$pos, $annot_types{$label}, "-", "$label: $value", ""]; } } } unless ($no_doms) { my ($ipr_acc, $db_ref, $s_descr) = ("","",""); while (($acc, $pos, $end, $ipr_acc, $db_ref, $s_descr, $len) = $get_doms_sql->fetchrow_array()) { $db_ref =~ s/G3DSA://; $seq_len = $len unless ($seq_len > $len); $value = domain_name($ipr_acc, $s_descr); if ($acc_comment) { $value .= "{$ipr_acc}"; } if ($db_ref_acc) { $value = $db_ref; } elsif ($use_ipr) { $value = $ipr_acc; } push @feats2, [$pos, "-", $end, $value, $ipr_acc]; } } # ensure that domains do not overlap for (my $i=1; $i < scalar(@feats2); $i++) { my $diff = $feats2[$i-1]->[2] - $feats2[$i]->[0]; if ($diff >= 0) { $feats2[$i-1]->[2] = $feats2[$i]->[0]+ int($diff/2); $feats2[$i]->[0] = $feats2[$i-1]->[2] + 1; } } my @n_feats2 = (); if ($neg_doms) { my $last_end = 0; for my $feat ( @feats2 ) { if ($feat->[0] - $last_end > 10) { push @n_feats2, [$last_end+1, "-", $feat->[0]-1, "NODOM", "NODOM"]; } $last_end = $feat->[2]; } if ($seq_len - $last_end > 10) { push @n_feats2, [$last_end+1, "-", $seq_len, "NODOM", "NODOM"]; } } my @feats = (); for my $feat (@feats2, @n_feats2) { push @feats, [$feat->[0], '-', $feat->[2], $feat->[-2], $feat->[-1] ]; } @feats = sort { $a->[0] <=> $b->[0] } (@sites, @feats); return \@feats; } sub get_lav_annots { my ($seq_len, $get_sites_sql, $get_doms_sql) = @_; my @feats = (); my %annot = (); while (my ($acc, $pos, $end, $ipr_acc, $db_ref, $s_descr, $len) = $get_doms_sql->fetchrow_array()) { # $value = domain_name($label,$value); my $value = domain_name($ipr_acc,$s_descr); push @feats, [$pos, $end, $value]; } return \@feats; } # domain name takes a uniprot domain label, removes comments ( ; # truncated) and numbers and returns a canonical form. Thus: # Cortactin 6. # Cortactin 7; truncated. # becomes "Cortactin" # sub domain_name { my ($ipr_acc, $s_descr) = @_; $s_descr =~ s/[\-_]domain//; $s_descr =~ s/[\-_]homology//; $s_descr =~ s/^(.{20})/$1/; if (!defined($domains{$ipr_acc})) { $domain_cnt++; $domains{$ipr_acc} = $domain_cnt; } return $s_descr; } __END__ =pod =head1 NAME ann_feats2.pl =head1 SYNOPSIS ann_feats2.pl --no_doms --no_feats --lav 'sp|P09488|GSTM1_NUMAN' | accession.file =head1 OPTIONS -h short help --help include description --acc_comment provide the InterPro accession in {IPR00123} brackets for links --dom_db=G3DSA use a single domain database (e.g. PF, G3DSA, PS5) from InterPro --dom_acc provide the domain accession, not the description, as the domain label --neg, --neg_doms, --neg-doms label non-domain regions > 10 residues as "NODOM" --ipr proide InterPro accession as label --no-doms do not show domain boundaries (domains are always shown with --lav) --no-feats do not show feature (variants, active sites, phospho-sites) --no-label do show feature key (==*phosphorylation, etc) --lav produce lav2plt.pl annotation format, only show domains/repeats --host, --user, --password, --port --db -- info for mysql database =head1 DESCRIPTION C extracts feature, domain, and repeat information from two msyql databases (default names: uniprot/ipr2) built by parsing the uniprot_sprot.dat and uniprot_trembl.dat feature tables. Given a command line argument that contains a sequence accession (P09488) or identifier (GSTM1_HUMAN), the program looks up the features available for that sequence and returns them in a tab-delimited format: >sp|P09488 2 - 88 DOMAIN: GST N-terminal. 7 V F Mutagen: Reduces catalytic activity 100- fold. 23 * - MOD_RES: Phosphotyrosine (By similarity). 33 * - MOD_RES: Phosphotyrosine (By similarity). 34 * - MOD_RES: Phosphothreonine (By similarity). 90 - 208 DOMAIN: GST C-terminal. 108 V S Mutagen: Changes the properties of the enzyme toward some substrates. 108 V Q Mutagen: Reduces catalytic activity by half. 109 V I Mutagen: Reduces catalytic activity by half. 116 # - BINDING: Substrate. 116 V A Mutagen: Reduces catalytic activity 10-fold. 116 V F Mutagen: Slight increase of catalytic activity. 173 V N in allele GSTM1B; dbSNP:rs1065411. 210 V T in dbSNP:rs449856. If features are provided, then a legend of feature symbols is provided as well (disabled with C<--no-label>): =*:phosphorylation ==:active site =@:site =^:binding =!:metal binding If the C<--lav> option is specified, domain and repeat features are presented in a different format for the C program: >sp|P09488|GSTM1_HUMAN 2 88 GST N-terminal. 90 208 GST C-terminal. C is designed to be used by the B programs with the C<-V \!ann_feats2.pl> option. It can also be used with the lav2plt.pl program with the C<--xA "\!ann_feats2.pl --lav"> or C<--yA "\!ann_feats2.pl --lav"> options. =head1 AUTHOR William R. Pearson, wrp@virginia.edu =cut fasta36-36.3.8i_14-Nov-2020/scripts/ann_feats_up_sql.pl000077500000000000000000000323301433453312700222360ustar00rootroot00000000000000#!/usr/bin/env perl ################################################################ # copyright (c) 2014,2015 by William R. Pearson and The Rector & # Visitors of the University of Virginia ################################################################ # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under this License is distributed on an "AS # IS" BASIS, WITHOUT WRRANTIES OR CONDITIONS OF ANY KIND, either # express or implied. See the License for the specific language # governing permissions and limitations under the License. ################################################################ # ann_feats_up_sql.pl gets an annotation file from fasta36 -V with a line of the form: # gi|62822551|sp|P00502|GSTA1_RAT Glutathione S-transfer\n (at least from pir1.lseg) # # it must: # (1) read in the line # (2) parse it to get the up_acc # (3) return the tab delimited features # # this version can read feature2 uniprot features (acc/pos/end/label/value), but returns sorted start/end domains # modified 18-Jan-2016 to produce annotation symbols consistent with ann_feats_up_www2.pl use warnings; use strict; use DBI; use Getopt::Long; use Pod::Usage; use vars qw($host $db $a_table $port $user $pass); my %domains = (); my $domain_cnt = 0; my $hostname = `/bin/hostname`; unless ($hostname =~ m/ebi/) { ($host, $db, $a_table, $port, $user, $pass) = ("wrpxdb.its.virginia.edu", "uniprot", "annot2", 0, "web_user", "fasta_www"); # $host = 'xdb'; } else { ($host, $db, $a_table, $port, $user, $pass) = ("mysql-pearson-prod", "up_db", "annot", 4124, "web_user", "fasta_www"); } my ($sstr, $lav, $neg_doms, $no_vars, $no_doms, $no_feats, $shelp, $help, $pfam26) = (0,0,0,0,0,0,0,0,0,0); my ($min_nodom) = (10); my ($show_color) = (1); my $color_sep_str = " :"; $color_sep_str = '~'; GetOptions( "host=s" => \$host, "db=s" => \$db, "user=s" => \$user, "password=s" => \$pass, "port=i" => \$port, "lav" => \$lav, "no_doms" => \$no_doms, "no-doms" => \$no_doms, "nodoms" => \$no_doms, "no_var" => \$no_vars, "no-var" => \$no_vars, "novar" => \$no_vars, "neg" => \$neg_doms, "neg_doms" => \$neg_doms, "neg-doms" => \$neg_doms, "negdoms" => \$neg_doms, "min_nodom=i" => \$min_nodom, "min-nodom=i" => \$min_nodom, "no_feats" => \$no_feats, "no-feats" => \$no_feats, "nofeats" => \$no_feats, "color!" => \$show_color, "sstr" => \$sstr, "h|?" => \$shelp, "help" => \$help, ); pod2usage(1) if $shelp; pod2usage(exitstatus => 0, verbose => 2) if $help; pod2usage(1) unless (@ARGV || -p STDIN || -f STDIN); my $connect = "dbi:mysql(AutoCommit=>1,RaiseError=>1):database=$db"; $connect .= ";host=$host" if $host; $connect .= ";port=$port" if $port; my $dbh = DBI->connect($connect, $user, $pass ) or die $DBI::errstr; my @feat_keys = qw(ACT_SITE MOD_RES BINDING SITE METAL); my @feat_vals = ( '=','*','#','^','!'); my @feat_names = ('Active site', 'Modified', 'Substrate binding', 'Site', 'Metal binding'); unless ($no_vars) { push @feat_keys, qw(VARIANT MUTAGEN); push @feat_vals, ('V','V'); push @feat_names, ('',''); } my %feat_label = (); @feat_label{@feat_keys} = @feat_names; my @dom_keys = qw( DOMAIN REPEAT ); my @dom_vals = ( [ '[', ']'],[ '[', ']']); my @ssr_keys = qw( SSTR ); my @ssr_vals = ( [ '[', ']']); my %annot_types = (); my $get_annot_sub = \&get_fasta_annots; if ($lav) { $no_feats = 1; $get_annot_sub = \&get_lav_annots; } if ($sstr) {@annot_types{@ssr_keys} = @ssr_vals;} else { @annot_types{@feat_keys} = @feat_vals unless ($no_feats); @annot_types{@dom_keys} = @dom_vals unless ($no_doms); } if ($neg_doms) { $domains{'NODOM'}=0; } my $get_annots_id = $dbh->prepare(qq(select acc, pos, end, label, value, len from features2 join $a_table using(acc) where id=? order by pos)); my $get_annots_acc = $dbh->prepare(qq(select acc, pos, end, label, value, len from features2 join $a_table using(acc) where acc=? order by pos)); my $get_annots_refacc = $dbh->prepare(qq(select ref_acc, pos, end, label, value, len from features2 join $a_table using(acc) where ref_acc=? order by pos)); my $up_atable = "uniprot." . $a_table; my $get_annots_sql = $get_annots_id; my ($tmp, $gi, $sdb, $acc, $id, $use_acc); unless ($no_feats || $sstr) { for my $i ( 0 .. $#feat_keys) { next unless $feat_label{$feat_keys[$i]}; print "=",$feat_vals[$i],":",$feat_label{$feat_keys[$i]},"\n"; } } # unless ($no_feats || $sstr) { # print "=*:phosphorylation\n"; # print "==".":active site\n"; # print "=@".":site\n"; # print "=^:binding\n"; # print "=!:metal binding\n"; # } # get the query my ($query, $seq_len) = @ARGV; $seq_len = 0 unless defined($seq_len); $query =~ s/^>// if ($query); my @annots = (); #if it's a file I can open, read and parse it # unless ($query && ($query =~ m/[\|:]/ || # $query =~ m/^[NX]P_/ || # $query =~ m/^[OPQ][0-9][A-Z0-9]{3}[0-9]|[A-NR-Z][0-9]([A-Z][A-Z0-9]{2}[0-9]){1,2}\s/)) { if (! $query || -r $query) { while (my $a_line = <>) { $a_line =~ s/^>//; chomp $a_line; push @annots, show_annots($a_line, $get_annot_sub); } } else { push @annots, show_annots("$query\t$seq_len", $get_annot_sub); } for my $seq_annot (@annots) { print ">",$seq_annot->{seq_info},"\n"; for my $annot (@{$seq_annot->{list}}) { if (!$lav && $show_color && defined($domains{$annot->[-1]})) { $annot->[-1] .= $color_sep_str.$domains{$annot->[-1]}; } print join("\t",@$annot),"\n"; } } exit(0); sub show_annots { my ($query_len, $get_annot_sub) = @_; my ($annot_line, $seq_len) = split(/\t/,$query_len); my %annot_data = (seq_info=>$annot_line); if ($annot_line =~ m/^gi\|/) { $use_acc = 1; ($tmp, $gi, $sdb, $acc, $id) = split(/\|/,$annot_line); } elsif ($annot_line =~ m/^(SP|TR):(\w+) (\w+)/) { ($sdb, $id, $acc) = ($1,$2,$3); $use_acc = 1; $sdb = lc($sdb) } elsif ($annot_line =~ m/^(SP|TR):(\w+)/) { ($sdb, $id) = ($1,$2); $use_acc = 0; $sdb = lc($sdb) } elsif ($annot_line !~ m/\|/) { # new NCBI swissprot format $use_acc =1; $sdb = 'sp'; ($acc) = split(/\s+/,$annot_line); } else { $use_acc = 1; ($sdb, $acc, $id) = split(/\|/,$annot_line); } # remove version number unless ($use_acc) { $get_annots_sql = $get_annots_id; $get_annots_sql->execute($id); } else { unless ($sdb =~ m/ref/) { $get_annots_sql = $get_annots_acc; } else { $get_annots_sql = $get_annots_refacc; } $acc =~ s/\.\d+$//; $get_annots_sql->execute($acc); } $annot_data{list} = $get_annot_sub->(\%annot_types, $get_annots_sql, $seq_len); return \%annot_data; } sub get_fasta_annots { my ($annot_types, $get_annots_sql, $seq_len) = @_; my ($acc, $pos, $end, $label, $value, $comment, $len); $seq_len = 0; my @feats2 = (); # features with start/stop, for checking overlap, adding negative my @sites = (); # sites with one position while (($acc, $pos, $end, $label, $value, $len) = $get_annots_sql->fetchrow_array()) { $seq_len = $len if ($len > $seq_len); if ($annot_types->{$label}) { if ($label =~ m/VARIANT/) { my ($aa_res, $comment) = split(/\(/,$value); if ($comment) { $comment =~ s/\)//; # remove the /FTId=VAR_014497 information $comment =~ s/\s+\/FTId=.*$//; } else {$comment = "";} next if ($comment =~ /MISSING/); my ($vfrom, $vto) = ($aa_res =~ m/(\w)\s*->\s*(\w)/); if ($vto) { $comment = '' unless $comment; $value = $vto; push @sites, [$pos, $annot_types->{$label}, $value, $comment]; } } elsif ($label =~ m/MUTAGEN/) { my ($aa_res, $comment) = split(/: /,$value); next if ($comment =~ /MISSING/); my ($vfrom, $vto) = split(/\->/,$aa_res); next if (length($vfrom) > 1 || length($vto) > 1); if ($vto) { my @vto_list = split(/,/,$vto); $value = $vto; for my $val ( @vto_list) { push @sites, [$pos, $annot_types->{$label}, $val, "Mutagen: $comment"]; } } } elsif ($label =~ m/DOMAIN/ || $label =~ m/REPEAT/) { $value = domain_name($label,$value); push @feats2, [$pos, "-", $end, $value]; } elsif ($label =~ m/SSTR/) { next if $value =~ m/TURN/; push @feats2, [$pos, "-", $end, $value]; } else { # print join("\t",($pos, $annot_types->{$label})),"\n"; # print join("\t",($pos, $annot_types->{$label}, "-", "$label: $value")),"\n"; push @sites, [$pos, $annot_types->{$label}, "-", "$label: $value"]; } } } # ensure that domains do not overlap for (my $i=1; $i < scalar(@feats2); $i++) { my $diff = $feats2[$i-1]->[2] - $feats2[$i]->[0]; if ($diff >= 0) { $feats2[$i-1]->[2] = $feats2[$i]->[0]+ int($diff/2); $feats2[$i]->[0] = $feats2[$i-1]->[2] + 1; } } my @n_feats2 = (); if ($neg_doms) { my $last_end = 0; for my $feat ( @feats2 ) { if ($feat->[0] - $last_end > $min_nodom) { push @n_feats2, [$last_end+1, "-", $feat->[0]-1, "NODOM"]; } $last_end = $feat->[2]; } if ($seq_len - $last_end > $min_nodom) { push @n_feats2, [$last_end+1, "-", $seq_len, "NODOM"]; } } my @feats = (); for my $feat (@feats2, @n_feats2) { push @feats, [$feat->[0], '-', $feat->[2], $feat->[-1] ]; # push @feats, [$feat->[2], ']', '-', ""]; } @feats = sort { $a->[0] <=> $b->[0] } (@sites, @feats); return \@feats; } sub get_lav_annots { my ($annot_types, $get_annots_sql, $seq_len) = @_; my ($pos, $end, $label, $value, $comment); my @feats = (); my %annot = (); while (($acc, $pos, $end, $label, $value) = $get_annots_sql->fetchrow_array()) { next unless ($label =~ m/^DOMAIN/ || $label =~ m/^REPEAT/); $value =~ s/\s?\{.+\}\.?$//; $value = domain_name($label,$value); push @feats, [$pos, $end, $value]; } return \@feats; } # domain name takes a uniprot domain label, removes comments ( ; # truncated) and numbers and returns a canonical form. Thus: # Cortactin 6. # Cortactin 7; truncated. # becomes "Cortactin" # sub domain_name { my ($label, $value) = @_; if ($label =~ /DOMAIN|REPEAT/) { $value =~ s/;.*$//; $value =~ s/\s+\d+\.?$//; $value =~ s/\.\s*$//; $value =~ s/\s+\d+\.\s+.*$//; $value =~ s/\s+/_/; if (!defined($domains{$value})) { $domain_cnt++; $domains{$value} = $domain_cnt; } return $value; } else { return $value; } } __END__ =pod =head1 NAME ann_feats_up_sql.pl =head1 SYNOPSIS ann_feats_up_sql.pl --no_doms --no_feats --lav 'sp|P09488|GSTM1_NUMAN' | accession.file =head1 OPTIONS -h short help --help include description --no-doms do not show domain boundaries (domains are always shown with --lav) --no-feats do not show features (variants, active sites, phospho-sites) --no-var do not show variant sites (--no_var, --novar) --lav produce lav2plt.pl annotation format, only show domains/repeats --neg-doms, -- report domains between annotated domains as NODOM (also --neg, --neg_doms) --min_nodom=10 minimum non-domain length to produce NODOM --host, --user, --password, --port --db -- info for mysql database =head1 DESCRIPTION C extracts feature, domain, and repeat information from a msyql database (default name, uniprot) built by parsing the uniprot_sprot.dat and uniprot_trembl.dat feature tables. Given a command line argument that contains a sequence accession (P09488) or identifier (GSTM1_HUMAN), the program looks up the features available for that sequence and returns them in a tab-delimited format: >sp|P09488|GSTM1_HUMAN 2 - 88 GST_N-terminal~1 7 V F Mutagen: Reduces catalytic activity 100- fold. {ECO:0000269|PubMed:16548513}. 34 * - MOD_RES: Phosphothreonine. {ECO:0000250|UniProtKB:P10649}. 90 - 208 GST_C-terminal~2 108 V S Mutagen: Changes the properties of the enzyme toward some substrates. {ECO:0000269|PubMed:16548513, ECO:0000269|PubMed:9930979}. 108 V Q Mutagen: Reduces catalytic activity by half. {ECO:0000269|PubMed:16548513, ECO:0000269|PubMed:9930979}. 109 V I Mutagen: Reduces catalytic activity by half. {ECO:0000269|PubMed:16548513}. 116 # - BINDING: Substrate. 116 V A Mutagen: Reduces catalytic activity 10-fold. {ECO:0000269|PubMed:16548513}. 116 V F Mutagen: Slight increase of catalytic activity. {ECO:0000269|PubMed:16548513}. 173 V N in allele GSTM1B; dbSNP:rs1065411. {ECO:0000269|Ref.3, ECO:0000269|Ref.5}. 210 * - MOD_RES: Phosphoserine. {ECO:0000250|UniProtKB:P04905}. 210 V T in dbSNP:rs449856. If features are provided, then a legend of feature symbols is provided as well: ==:Active site =*:Modified =#:Substrate binding =^:Site =!:Metal binding If the C<--lav> option is specified, domain and repeat features are presented in a different format for the C program: >sp|P09488|GSTM1_HUMAN 2 88 GST N-terminal. 90 208 GST C-terminal. C is designed to be used by the B programs with the C<-V \!ann_feats_up_sql.pl> option, or by the C script. It can also be used with the lav2plt.pl program with the C<--xA "\!ann_feats_up_sql.pl --lav"> or C<--yA "\!ann_feats_up_sql.pl --lav"> options. =head1 AUTHOR William R. Pearson, wrp@virginia.edu =cut fasta36-36.3.8i_14-Nov-2020/scripts/ann_feats_up_www2.pl000077500000000000000000000310621433453312700223460ustar00rootroot00000000000000#!/usr/bin/env perl ################################################################ # copyright (c) 2014,2015 by William R. Pearson and The Rector & # Visitors of the University of Virginia */ ################################################################ # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under this License is distributed on an "AS # IS" BASIS, WITHOUT WRRANTIES OR CONDITIONS OF ANY KIND, either # express or implied. See the License for the specific language # governing permissions and limitations under the License. ################################################################ ## modified 29-Sept-2016 to use EBI/proteins JSON URL: ## https://www.ebi.ac.uk/proteins/api/features/p12345 # ann_feats_up_www2.pl gets an annotation file from fasta36 -V with a line of the form: # SP:GSTM1_HUMAN P09488 218 # # it must: # (1) read in the line # (2) parse it to get the up_acc # (3) return the tab delimited features # # this version can read feature2 uniprot features (acc/pos/end/label/value), but returns sorted start/end domains use warnings; use strict; use Getopt::Long; use Pod::Usage; use LWP::Simple; use LWP::UserAgent; use JSON qw(decode_json); ## use IO::String; my $ua = LWP::UserAgent->new(ssl_opts=>{verify_hostname => 0}); my $up_base = 'https://www.ebi.ac.uk/proteins/api/features'; my $uniprot_suff = ".json"; my %domains = (); my $domain_cnt = 0; my $hostname = `/bin/hostname`; my ($sstr, $lav, $neg_doms, $no_doms, $no_feats, $no_vars, $no_over, $data_file, $shelp, $help) = (0,0,0,0,0,0,0,0,0,0); my ($min_nodom) = (10); my ($show_color) = (1); my $color_sep_str = " :"; $color_sep_str = '~'; GetOptions( "lav" => \$lav, "no-over" => \$no_over, "no_doms" => \$no_doms, "no-doms" => \$no_doms, "nodoms" => \$no_doms, "no_vars" => \$no_vars, "no-vars" => \$no_vars, "novars" => \$no_vars, "neg" => \$neg_doms, "neg_doms" => \$neg_doms, "neg-doms" => \$neg_doms, "negdoms" => \$neg_doms, "min_nodom=i" => \$min_nodom, "no_feats" => \$no_feats, "no-feats" => \$no_feats, "nofeats" => \$no_feats, "data:s" => \$data_file, "color!" => \$show_color, "sstr" => \$sstr, "h|?" => \$shelp, "help" => \$help, ); pod2usage(1) if $shelp; pod2usage(exitstatus => 0, verbose => 2) if $help; pod2usage(1) unless @ARGV || $data_file || -p STDIN || -f STDIN; my @feat_keys = qw( ACT_SITE MOD_RES BINDING METAL SITE ); my @feat_vals = ( '=','*','#','^','@'); my @feat_names = ('Active site', 'Modified', 'Binding', 'Metal binding', 'Site'); unless ($no_vars) { push @feat_keys, qw(MUTAGEN VARIANT); push @feat_vals, ('V','V',); push @feat_names, ("","",); } my %feats_text = (); @feats_text{@feat_keys} = @feat_names; my %feats_label; @feats_label{@feat_keys} = @feat_names; my @dom_keys = qw( DOMAIN REPEAT ); my @dom_vals = ( [ '[', ']'],[ '[', ']']); my @ssr_keys = qw(STRAND HELIX); my @ssr_vals = ( [ '[', ']'], [ '[', ']']); my %annot_types = (); my $get_annot_sub = \&json_annots; if ($lav) { $no_feats = 1; } if ($sstr) { @annot_types{@ssr_keys} = @ssr_vals; } else { @annot_types{@feat_keys} = @feat_vals unless ($no_feats); @annot_types{@dom_keys} = @dom_vals unless ($no_doms); } if ($neg_doms) { $domains{'NODOM'}=0; } my ($tmp, $gi, $sdb, $acc, $id, $use_acc); unless ($no_feats || $sstr) { for my $i ( 0 .. $#feat_keys) { next unless $feats_label{$feat_keys[$i]}; print "=",$feat_vals[$i],":",$feats_label{$feat_keys[$i]},"\n"; } } # get the query my ($query, $seq_len) = @ARGV; $seq_len = 0 unless defined($seq_len); $query =~ s/^>// if ($query); my @annots = (); #if it's a file I can open, read and parse it unless ($data_file) { # unless ($query && ($query =~ m/[\|:]/ # || $query =~ m/^[OPQ][0-9][A-Z0-9]{3}[0-9]|[A-NR-Z][0-9]([A-Z][A-Z0-9]{2}[0-9]){1,2}\s/ # || $query =~ m/^(XN)(MP)_\d+/)) { if (! $query || -r $query) { while (my $a_line = <>) { $a_line =~ s/^>//; chomp $a_line; push @annots, lwp_annots($a_line, $get_annot_sub); } } else { push @annots, lwp_annots("$query\t$seq_len", $get_annot_sub); } } else { # just read the data from a file, give to $get_annot_sub(). my %annot_data = (seq_info => ">$data_file DATA"); open(DATA_IN, $data_file) || die "Cannot read $data_file"; my $lwp_data = ""; while () { $lwp_data .= $_; } $annot_data{list} = $get_annot_sub->(\%annot_types, $lwp_data,0); push @annots, \%annot_data; } for my $seq_annot (@annots) { print ">",$seq_annot->{seq_info},"\n"; for my $annot (@{$seq_annot->{list}}) { if (!$lav && $show_color && defined($domains{$annot->[-1]})) { $annot->[-1] .= $color_sep_str.$domains{$annot->[-1]}; } print join("\t",@$annot),"\n"; } } exit(0); sub lwp_annots { my ($query_len, $get_annot_sub) = @_; my ($annot_line, $seq_len) = split(/\t/,$query_len); my %annot_data = (seq_info=>$annot_line); if ($annot_line =~ m/^gi\|/) { ($tmp, $gi, $sdb, $acc, $id) = split(/\|/,$annot_line); } elsif ($annot_line =~ m/^(SP|TR):(\w+)\s(\w+)/) { ($sdb, $id, $acc) = (lc($1), $2, $3); } elsif ($annot_line =~ m/^(SP|TR):(\w+)/) { ($sdb, $id, $acc) = (lc($1), $2, ""); warn("*** $0 accession required: $annot_line\n"); } elsif ($annot_line =~ m/^(UR\d{3}:UniRef\d{2})_(\w+)/) { $sdb = lc($1); $id = $2; # $acc = $2; } elsif ($annot_line =~ m/\|/) { ($sdb, $acc, $id) = split(/\|/,$annot_line); } else { ($acc) = ($annot_line =~ m/^(\S+)/); } $acc =~ s/\.\d+// if ($acc); $annot_data{list} = []; my $lwp_features = ""; if ($acc && ($acc =~ m/^[A-Z][0-9][A-Z0-9]{3}[0-9]/)) { $lwp_features = get_https("$up_base/$acc.json"); } # elsif ($id && ($id =~ m/^\w+$/)) { # $lwp_features = get("$up_base/$id/$gff_post"); # } if ($lwp_features && ($lwp_features !~ /ERROR/)) { my $annot_json = decode_json($lwp_features); $annot_data{list} = $get_annot_sub->(\%annot_types, $annot_json, $seq_len); } return \%annot_data; } #### # parses www.ebi.ac.uk/uniprot/api json # sub json_annots { my ($annot_types, $json_ref, $seq_len) = @_; my ($acc, $pos, $end, $label, $value, $comment, $len); $seq_len = 0; my @feats2 = (); # features with start/stop, for checking overlap, adding negative my @sites = (); # sites with one position my ($seq_str, $seq_acc, $seq_id) = @{$json_ref}{qw(sequence accession entryName)}; $seq_len = length($seq_str); for my $feat ( @{$json_ref->{features}} ) { if ($annot_types->{$feat->{type}}) { my ($label, $pos, $end, $value) = @{$feat}{qw(type begin end description)}; $pos =~ s/[<>]//g; $end =~ s/[<>]//g; if ($label =~ m/DOMAIN/ || $label =~ m/REPEAT/) { $value = domain_name($label,$value); push @feats2, [$pos, "-", $end, $value]; } elsif ($label =~ m/HELIX/) { push @feats2, [$pos, "-", $end, $label]; } elsif ($label =~ m/STRAND/) { push @feats2, [$pos, "-", $end, $label]; } elsif ($label =~ m/VARIANT/ || $label =~ m/MUTAGEN/) { my $alt = $feat->{alternativeSequence}; if ($alt eq '') { $alt = 'X';} elsif (length($alt) > 1) { $alt=substr($alt,0,1);} push @sites, [$pos, $annot_types->{$label}, $alt, $value]; } else { next unless ($pos == $end); if ($feats_text{$label}) { my $info = $feats_text{$label}; if ($value) { $info .= ": $value"; } push @sites, [$pos, $annot_types->{$label}, "-", $info]; } else { push @sites, [$pos, $annot_types->{$label}, "-", $value]; } } } } @feats2 = sort { $a->[0] <=> $b->[0] } @feats2; if ($no_over) { # check for containment my $have_contained = 0; my $last_container = 0; for (my $i=1; $i < scalar(@feats2); $i++) { if ($feats2[$i]->[0] >= $feats2[$last_container]->[0] && $feats2[$i]->[2] <= $feats2[$last_container]->[2]) { $feats2[$i]->[1] = 'Delete'; $have_contained = 1; } else { $last_container=$i; } } if ($have_contained) { @feats2 = grep { $_->[1] !~ /Delete/ } @feats2; } # ensure that domains do not overlap for (my $i=1; $i < scalar(@feats2); $i++) { my $diff = $feats2[$i-1]->[2] - $feats2[$i]->[0]; if ($diff >= 0) { $feats2[$i-1]->[2] = $feats2[$i]->[0]+ int($diff/2); $feats2[$i]->[0] = $feats2[$i-1]->[2] + 1; } } } my @n_feats2 = (); if ($neg_doms) { my $last_end = 0; for my $feat ( @feats2 ) { if ($feat->[0] - $last_end > $min_nodom) { push @n_feats2, [$last_end+1, "-", $feat->[0]-1, "NODOM"]; } $last_end = $feat->[2]; } if ($seq_len - $last_end > $min_nodom) { push @n_feats2, [$last_end+1, "-", $seq_len, "NODOM"]; } } my @feats = (); for my $feat (@feats2, @n_feats2) { if (!$lav) { push @feats, [$feat->[0], '-', $feat->[2], $feat->[-1] ]; # push @feats, [$feat->[2], ']', '-', ""]; } else { push @feats, [$feat->[0], $feat->[2], $feat->[-1]]; } } @feats = sort { $a->[0] <=> $b->[0] } (@sites, @feats); return \@feats; } # domain name takes a uniprot domain label, removes comments ( ; # truncated) and numbers and returns a canonical form. Thus: # Cortactin 6. # Cortactin 7; truncated. # becomes "Cortactin" # sub domain_name { my ($label, $value) = @_; $value = 'UnDef' unless $value; $value =~ s/ /_/g; if ($label =~ /Domain|Repeat/i) { $value =~ s/;.*$//; $value =~ s/\.\s*$//; $value =~ s/\s+\d+$//; if (!defined($domains{$value})) { $domain_cnt++; $domains{$value} = $domain_cnt; } return $value; } else { return $value; } } sub get_https { my ($url) = @_; my $result = ""; my $response = $ua->get($url); if ($response->is_success) { $result = $response->decoded_content; } else { $result = ''; } return $result; } __END__ =pod =head1 NAME ann_feats_up_www2.pl =head1 SYNOPSIS ann_feats_up_www2.pl --no_doms --no_feats --lav 'sp|P09488|GSTM1_NUMAN' | accession.file =head1 OPTIONS -h short help --help include description --no-doms do not show domain boundaries (domains are always shown with --lav) --no-feats do not show feature (variants, active sites, phospho-sites) --lav produce lav2plt.pl annotation format, only show domains/repeats --neg-doms, -- report domains between annotated domains as NODOM (also --neg, --neg_doms) --min_nodom=10 -- minimum length between domains for NODOM --host, --user, --password, --port --db -- info for mysql database =head1 DESCRIPTION C extracts feature, domain, and repeat information from the Uniprot DAS server through an XSLT transation provided by https://www.ebi.ac.uk/Tools/dbfetch/dbfetch/uniprotkb. This server provides GFF descriptions of Uniprot entries, with most of the information provided in UniProt feature tables. C is an alternative to C and C that does not require a local MySQL copy of Pfam. Given a command line argument that contains a sequence accession (P09488), the program looks up the features available for that sequence and returns them in a tab-delimited format: >sp|P09488|GSTM1_HUMAN 2 [ - GST N-terminal :1 7 V F Mutagen: Reduces catalytic activity 100- fold. 23 * - MOD_RES: Phosphotyrosine (By similarity). 33 * - MOD_RES: Phosphotyrosine (By similarity). 34 * - MOD_RES: Phosphothreonine (By similarity). 88 ] - 90 [ - GST C-terminal :2 108 V Q Mutagen: Reduces catalytic activity by half. 108 V S Mutagen: Changes the properties of the enzyme toward some substrates. 109 V I Mutagen: Reduces catalytic activity by half. 116 # - BINDING: Substrate. 116 V A Mutagen: Reduces catalytic activity 10-fold. 116 V F Mutagen: Slight increase of catalytic activity. 173 V N in allele GSTM1B; dbSNP:rs1065411. 208 ] - 210 V T in dbSNP:rs449856. If features are provided, then a legend of feature symbols is provided as well: =*:phosphorylation ==:active site =@:site =^:binding =!:metal binding If the C<--lav> option is specified, domain and repeat features are presented in a different format for the C program: >sp|P09488|GSTM1_HUMAN 2 88 GST N-terminal. 90 208 GST C-terminal. C is designed to be used by the B programs with the C<-V \!ann_feats_up_www2.pl> option. It can also be used with the lav2plt.pl program with the C<--xA "\!ann_feats_up_www2.pl --lav"> or C<--yA "\!ann_feats_up_www2.pl --lav"> options. =head1 AUTHOR William R. Pearson, wrp@virginia.edu =cut fasta36-36.3.8i_14-Nov-2020/scripts/ann_ipr_www.pl000077500000000000000000000343331433453312700212540ustar00rootroot00000000000000#!/usr/bin/env perl ################################################################ # copyright (c) 2014 by William R. Pearson and The Rector & # Visitors of the University of Virginia */ ################################################################ # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under this License is distributed on an "AS # IS" BASIS, WITHOUT WRRANTIES OR CONDITIONS OF ANY KIND, either # express or implied. See the License for the specific language # governing permissions and limitations under the License. ################################################################ # ann_ipr_www.pl gets an annotation file from fasta36 -V with a line of the form: # gi|62822551|sp|P00502|GSTA1_RAT Glutathione S-transfer\n (at least from pir1.lseg) # this version only annotates sequences known to InterPro # and only provides domain information # This script uses the dbfetch iprmc database, which REQUIRES a # Uniprot Acc (not ID). If an Acc is not provided, we must get an ACC # first from the ID. # SP:GSTM1_HUMAN P09488 218 # # it must: # (1) read in the line # (2) parse it to get the up_acc # (3) return the tab delimited domains # use warnings; use strict; use Getopt::Long; use Pod::Usage; use LWP::Simple; ## use IO::String; # use dbfetch and IPRMC to get Interpro domain coordinates # http://www.ebi.ac.uk/Tools/dbfetch/dbfetch?db=iprmc&id=gstm1_human&format=gff2&style=default&Retrieve=Retrieve my $ipr_base = 'http://www.ebi.ac.uk/Tools/dbfetch/dbfetch?db=iprmc&id='; my $gff_post = '&format=gff2&style=default&Retrieve=Retrieve'; ################################################################ # ##gff-version 2 ##Type Protein # InterPro Matches for UniProtKB entries ##source-version InterProMatches 49.0 ##date 20-NOV-14 ##sequence-region P09488 1 218 # P09488 InterProScan region 99 190 1.1999999998684077E-49 . . Signature GENE3D G3DSA:1.20.1050.10 "G3DSA:1.20.1050.10" T ; InterPro IPR010987 "Glutathione S-transferase, C-terminal-like" # P09488 InterProScan region 2 98 5.800000000494973E-51 . . Signature GENE3D G3DSA:3.40.30.10 "G3DSA:3.40.30.10" T ; InterPro IPR012336 "Thioredoxin-like fold" # P09488 InterProScan region 105 189 3.900000000000007E-16 . . Signature PFAM PF00043 "GST_C" T ; InterPro IPR004046 "Glutathione S-transferase, C-terminal" # P09488 InterProScan region 4 82 7.299999999999985E-21 . . Signature PFAM PF02798 "GST_N" T ; InterPro IPR004045 "Glutathione S-transferase, N-terminal" # P09488 InterProScan region 31 43 1.1000015067164208E-25 . . Signature PRINTS PR01267 "GSTRNSFRASEM" T ; InterPro IPR003081 "Glutathione S-transferase, Mu class" # P09488 InterProScan region 44 56 1.1000015067164208E-25 . . Signature PRINTS PR01267 "GSTRNSFRASEM" T ; InterPro IPR003081 "Glutathione S-transferase, Mu class" # P09488 InterProScan region 87 98 1.1000015067164208E-25 . . Signature PRINTS PR01267 "GSTRNSFRASEM" T ; InterPro IPR003081 "Glutathione S-transferase, Mu class" # P09488 InterProScan region 139 152 1.1000015067164208E-25 . . Signature PRINTS PR01267 "GSTRNSFRASEM" T ; InterPro IPR003081 "Glutathione S-transferase, Mu class" # P09488 InterProScan region 1 88 0.0 . . Signature PROFILE PS50404 "GST_NTER" T ; InterPro IPR004045 "Glutathione S-transferase, N-terminal" # P09488 InterProScan region 90 208 0.0 . . Signature PROFILE PS50405 "GST_CTER" T ; InterPro IPR010987 "Glutathione S-transferase, C-terminal-like" # P09488 InterProScan region 1 217 0.0 . . Signature PANTHER PTHR11571 "PTHR11571" T # P09488 InterProScan region 1 217 0.0 . . Signature PANTHER PTHR11571:SF117 "PTHR11571:SF117" T # P09488 InterProScan region 86 217 8.190000000746436E-47 . . Signature SSF SSF47616 "SSF47616" T ; InterPro IPR010987 "Glutathione S-transferase, C-terminal-like" # P09488 InterProScan region 3 85 3.339999999911062E-23 . . Signature SSF SSF52833 "SSF52833" T ; InterPro IPR012336 "Thioredoxin-like fold" ### my %domains = (); my $domain_cnt = 0; my $hostname = `/bin/hostname`; my ($sstr, $lav, $neg_doms, $no_doms, $no_feats, $no_over, $data_file, $shelp, $help) = (0,0,0,0,1,0,0,0,0); my $dom_dbs = "PFAM+PROFILE+GENE3D"; my ($min_nodom) = (10); my $color_sep_str = " :"; $color_sep_str = '~'; GetOptions( "lav" => \$lav, "no-over" => \$no_over, "no_doms" => \$no_doms, "no-doms" => \$no_doms, "nodoms" => \$no_doms, "dom_dbs:s" => \$dom_dbs, # PF, PS, "dbs:s" => \$dom_dbs, "neg" => \$neg_doms, "neg_doms" => \$neg_doms, "neg-doms" => \$neg_doms, "negdoms" => \$neg_doms, "min_nodom=i" => \$min_nodom, "no_feats" => \$no_feats, "no-feats" => \$no_feats, "nofeats" => \$no_feats, "data:s" => \$data_file, "sstr" => \$sstr, "h|?" => \$shelp, "help" => \$help, ); pod2usage(1) if $shelp; pod2usage(exitstatus => 0, verbose => 2) if $help; pod2usage(1) unless (-p STDIN || -f STDIN || @ARGV || $data_file); my @feat_keys = qw(catalytic_residue posttranslation_modification binding_motif metal_contact polypeptide_region mutated_variant_site natural_variant_site); my %feats_text = (); @feats_text{@feat_keys} = ('Active site', '', 'Substrate binding', 'Metal binding', 'Site', '',''); my %feats_label; @feats_label{@feat_keys} = ('Active site', 'Modified', 'Substrate binding', 'Metal binding', 'Site', '',''); my @feat_vals = ( '=','*','#','^','@','V','V'); my %annot_types = (); my $get_annot_sub = \&iprmc_annots; if ($lav) { $no_feats = 1; } if ($dom_dbs) { my @dom_db_list = split(/\+/,$dom_dbs); for my $dom_db (@dom_db_list) { $annot_types{$dom_db} = $dom_db; } } if ($neg_doms) { $domains{'NODOM'}=0; } my ($tmp, $gi, $sdb, $acc, $id, $use_acc); unless ($no_feats || $sstr) { for my $i ( 0 .. $#feat_keys) { next unless $feats_label{$feat_keys[$i]}; print "=",$feat_vals[$i],":",$feats_label{$feat_keys[$i]},"\n"; } } # get the query my ($query, $seq_len) = @ARGV; $seq_len = 0 unless defined($seq_len); $query =~ s/^>// if ($query); my @annots = (); #if it's a file I can open, read and parse it unless ($data_file) { # unless ($query && ($query =~ m/[\|:]/ # || $query =~ m/^[OPQ][0-9][A-Z0-9]{3}[0-9]|[A-NR-Z][0-9]([A-Z][A-Z0-9]{2}[0-9]){1,2}\s/ # || $query =~ m/^(NX)(MP)_\d+/)) { if (! $query || -r $query) { while (my $a_line = <>) { $a_line =~ s/^>//; chomp $a_line; push @annots, lwp_annots($a_line, $get_annot_sub); } } else { push @annots, lwp_annots("$query\t$seq_len", $get_annot_sub); } } else { # just read the data from a file, give to $get_annot_sub(). my %annot_data = (seq_info => ">$data_file DATA"); open(DATA_IN, $data_file) || die "Cannot read $data_file"; my $lwp_data = ""; while () { $lwp_data .= $_; } $annot_data{list} = $get_annot_sub->(\%annot_types, $lwp_data,0); push @annots, \%annot_data; } for my $seq_annot (@annots) { print ">",$seq_annot->{seq_info},"\n"; for my $annot (@{$seq_annot->{list}}) { if (!$lav && defined($domains{$annot->[-1]})) { $annot->[-2] .= $color_sep_str.$domains{$annot->[-1]}; } print join("\t",@{$annot}[0..3]),"\n"; } } exit(0); sub lwp_annots { my ($query_len, $get_annot_sub) = @_; my ($annot_line, $seq_len) = split(/\t/,$query_len); my %annot_data = (seq_info=>$annot_line); if ($annot_line =~ m/^gi\|/) { ($tmp, $gi, $sdb, $acc, $id) = split(/\|/,$annot_line); } elsif ($annot_line =~ m/^(SP|TR):(\w+) (\w+)/) { ($sdb, $id, $acc) = (lc($1), $2, $3); } elsif ($annot_line =~ m/^(SP|TR):(\w+)/) { ($sdb, $id, $acc) = (lc($1), $2, ""); } elsif ($annot_line =~ m/^(UR\d{3}:UniRef\d{2})_(\w+)/) { $sdb = lc($1); $id = $2; # $acc = $2; } elsif ($annot_line =~ m/\|/) { ($sdb, $acc, $id) = split(/\|/,$annot_line); } else { ($acc) = ($annot_line =~ m/^(\S+)/); } $acc =~ s/\.\d+// if ($acc); $annot_data{list} = []; my $lwp_domains = ""; if ($acc && ($acc =~ m/^[A-Z][0-9][A-Z0-9]{3}[0-9]/)) { $lwp_domains = get($ipr_base . $acc . $gff_post); } elsif ($id && ($id =~ m/^\w+$/)) { $lwp_domains = get($ipr_base . $id . $gff_post); } if ($lwp_domains && ($lwp_domains !~ /ERROR/)) { $annot_data{list} = $get_annot_sub->(\%annot_types, $lwp_domains, $seq_len); } return \%annot_data; } # parses www.uniprot.org gff feature table sub iprmc_annots { my ($annot_types, $annot_data, $seq_len) = @_; my ($acc, $pos, $end, $label, $value, $comment, $len); my ($seq_acc, $seq_start, $seq_end, $tmp); $seq_len = 0; my @feats2 = (); # domains with start/stop, for checking overlap, adding negative my @sites = (); # sites with one position my @gff_lines = split(/\n/m,$annot_data); while (my $gff_line = shift @gff_lines) { chomp $gff_line; if ($gff_line =~ m/^#sequence-region/) { my @fields = split($gff_line, /\s+/); $seq_end = $fields[-1]; last; } } while (my $gff_line = shift(@gff_lines)) { next if ($gff_line =~ m/^#/); chomp($gff_line); my @gff_line_arr = split(/\t/,$gff_line); ($acc, $pos, $end, $comment) = @gff_line_arr[(0,3,4,-1)]; # parse the comment to get signature (domain_db), domain_db_acc, interpro_acc, description my ($domain_info, $dom_acc) = parse_ipr_comment($comment); next unless $domain_info; push @feats2, [$pos, "-", $end, $domain_info, $dom_acc]; $value = '' unless $value; # print join("\t",($pos, $annot_types->{$label})),"\n"; # print join("\t",($pos, $annot_types->{$label}, "-", "$label: $value")),"\n"; } @feats2 = sort { $a->[0] <=> $b->[0] } @feats2; if ($no_over) { # check for containment my $have_contained = 0; my $last_container = 0; for (my $i=1; $i < scalar(@feats2); $i++) { if ($feats2[$i]->[0] >= $feats2[$last_container]->[0] && $feats2[$i]->[2] <= $feats2[$last_container]->[2]) { $feats2[$i]->[1] = 'Delete'; $have_contained = 1; } else { $last_container=$i; } } if ($have_contained) { @feats2 = grep { $_->[1] !~ /Delete/ } @feats2; } # ensure that domains do not overlap for (my $i=1; $i < scalar(@feats2); $i++) { my $diff = $feats2[$i-1]->[2] - $feats2[$i]->[0]; if ($diff >= 0) { $feats2[$i-1]->[2] = $feats2[$i]->[0]+ int($diff/2); $feats2[$i]->[0] = $feats2[$i-1]->[2] + 1; } } } my @n_feats2 = (); if ($neg_doms) { my $last_end = 0; for my $feat ( @feats2 ) { if ($feat->[0] - $last_end > $min_nodom) { push @n_feats2, [$last_end+1, "-", $feat->[0]-1, "NODOM", ""]; } $last_end = $feat->[2]; } if ($seq_len - $last_end > $min_nodom) { push @n_feats2, [$last_end+1, "-", $seq_len, "NODOM", ""]; } } my @feats = (); for my $feat (@feats2, @n_feats2) { if (!$lav) { push @feats, [$feat->[0], '-', $feat->[2], $feat->[-2], $feat->[-1] ]; # push @feats, [$feat->[2], ']', '-', ""]; } else { push @feats, [$feat->[0], $feat->[2], $feat->[-1]]; } } @feats = sort { $a->[0] <=> $b->[0] } (@sites, @feats); # now that domains are sorted, give them names for my $feat ( @feats ) { $feat->[-2] = domain_name($feat->[-2],$feat->[-1]); } return \@feats; } sub parse_ipr_comment { my ($comment_str) = @_; my @comments = split(/\s+;\s+/,$comment_str); my @comment_info = (); my $ipr_info = ""; $comments[0] =~ s/^Signature\s+//; return ("","") unless @comments; for my $comment (@comments) { my %ipr_data = (); @ipr_data{qw(db acc descr)} = ($comment =~ m/(\S+)\s+(\S+)\s+"([^"]+)"/); return ("","") if $ipr_data{db} =~ m/(PRINTS|PROSITE)/i; $ipr_data{descr} =~ s/\s+/_/g; push @comment_info, \%ipr_data; } my $primary_acc = $comment_info[0]->{acc}; for my $comment (@comment_info) { if ($comment->{db} =~ m/InterPro/) { return ("$primary_acc:".$comment->{descr},$comment->{acc}); } } return ("",""); } # domain name takes a uniprot domain label, removes comments ( ; # truncated) and numbers and returns a canonical form. Thus: # Cortactin 6. # Cortactin 7; truncated. # becomes "Cortactin" # sub domain_name { my ($value, $ipr_acc) = @_; $value = 'UnDef' unless $value; $value =~ s/;.*$//; $value =~ s/\.\s*$//; $value =~ s/\s+\d+$//; if (!defined($domains{$ipr_acc})) { $domain_cnt++; $domains{$ipr_acc} = $domain_cnt; } return $value; } __END__ =pod =head1 NAME ann_ipr_www.pl =head1 SYNOPSIS ann_ipr_www.pl --no_doms --no_feats --lav 'sp|P09488|GSTM1_NUMAN' | accession.file =head1 OPTIONS -h short help --help include description --no-doms do not show domain boundaries (domains are always shown with --lav) --no-feats do not show feature (variants, active sites, phospho-sites) --lav produce lav2plt.pl annotation format, only show domains/repeats --neg-doms, -- report domains between annotated domains as NODOM (also --neg, --neg_doms) --min_nodom=10 -- minimum length between domains for NODOM --host, --user, --password, --port --db -- info for mysql database =head1 DESCRIPTION C extracts feature, domain, and repeat information from the Uniprot DAS server through an XSLT transation provided by http://www.ebi.ac.uk/Tools/dbfetch/dbfetch/uniprotkb. This server provides GFF descriptions of Uniprot entries, with most of the information provided in UniProt feature tables. C is an alternative to C and C that does not require a local MySQL copy of Pfam. Given a command line argument that contains a sequence accession (P09488), the program looks up the domains available for that sequence and returns them in a tab-delimited format: >sp|P09488|GSTM1_HUMAN 2 - 88 GST N-terminal :1 90 - 208 GST C-terminal :2 If the C<--lav> option is specified, domain and repeat domains are presented in a different format for the C program: >sp|P09488|GSTM1_HUMAN 2 88 GST N-terminal. 90 208 GST C-terminal. C is designed to be used by the B programs with the C<-V \!ann_ipr_www.pl> option. It can also be used with the lav2plt.pl program with the C<--xA "\!ann_ipr_www.pl --lav"> or C<--yA "\!ann_ipr_www.pl --lav"> options. =head1 AUTHOR William R. Pearson, wrp@virginia.edu =cut fasta36-36.3.8i_14-Nov-2020/scripts/ann_pdb_cath.pl000077500000000000000000000224651433453312700213250ustar00rootroot00000000000000#!/usr/bin/env perl ################################################################ # copyright (c) 2014 by William R. Pearson and The Rector & # Visitors of the University of Virginia */ ################################################################ # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under this License is distributed on an "AS # IS" BASIS, WITHOUT WRRANTIES OR CONDITIONS OF ANY KIND, either # express or implied. See the License for the specific language # governing permissions and limitations under the License. ################################################################ # ann_feats.pl gets an annotation file from fasta36 -V with a line of the form: # gi|62822551|sp|P00502|GSTA1_RAT Glutathione S-transfer\n (at least from pir1.lseg) # # it must: # (1) read in the line # (2) parse it to get the up_acc # (3) return the tab delimited features # # this version is designed for various formats of the pdbaa/pdbaa_off NCBI files with the lines: # >gi|4388890|pdb|1GTUA|sp|P09488 or # >gi|4388890|pdb|1GTU|A # if I can find |sp|P09488, I will use that, otherwise I will use # |pdb|1GTU|A (concatenated) and a different part of the cath_dom # database # use warnings; use strict; use DBI; use Getopt::Long; use Pod::Usage; use vars qw($host $db $port $user $pass); my $hostname = `/bin/hostname`; ($host, $db, $port, $user, $pass) = ("wrpxdb.its.virginia.edu", "uniprot", 0, "web_user", "fasta_www"); my ($neg_doms, $lav, $shelp, $help, $class) = (0, 0, 0, 0, 0); my ($min_nodom) = (10); my $color_sep_str = " :"; $color_sep_str = '~'; GetOptions( "host=s" => \$host, "db=s" => \$db, "user=s" => \$user, "password=s" => \$pass, "port=i" => \$port, "lav" => \$lav, "neg" => \$neg_doms, "neg_doms" => \$neg_doms, "neg-doms" => \$neg_doms, "min_nodom=i" => \$min_nodom, "class" => \$class, "h|?" => \$shelp, "help" => \$help, ); pod2usage(1) if $shelp; pod2usage(exitstatus => 0, verbose => 2) if $help; pod2usage(1) unless ( @ARGV || -p STDIN || -f STDIN); my $connect = "dbi:mysql(AutoCommit=>1,RaiseError=>1):database=$db"; $connect .= ";host=$host" if $host; $connect .= ";port=$port" if $port; my $dbh = DBI->connect($connect, $user, $pass ) or die $DBI::errstr; my %domains = (NODOM=>0); my $domain_cnt = 0; my $get_offsets_pdb = $dbh->prepare(<prepare(<// if $query; my @annots = (); #if it's a file I can open, read and parse it # unless ($query && $query =~ m/[\|:]/) { if (! $query || -r $query) { while (my $a_line = <>) { $a_line =~ s/^>//; chomp $a_line; push @annots, show_annots($lav,$a_line); } } else { push @annots, show_annots($lav, "$query $seq_len"); } for my $seq_annot (@annots) { print ">",$seq_annot->{seq_info},"\n"; for my $annot (@{$seq_annot->{list}}) { if (!$lav && defined($domains{$annot->[-1]})) { $annot->[-1] .= $color_sep_str.$domains{$annot->[-1]}; } print join("\t",@$annot),"\n"; } } exit(0); sub show_annots { my ($lav, $annot_line) = @_; my ($query, $seq_len) = split(/\s+/,$annot_line); my %annot_data = (seq_info => $query); my ($tmp, $gi, $pdb, $pdb_acc, $pdb_id, $pdb_chain, $sdb, $up_acc, $off_flag); $off_flag = 0; if ($query =~ m/^gi\|/) { if ($query =~ m/\|sp\|/) { ($tmp, $gi, $pdb, $pdb_acc, $sdb, $up_acc) = split(/\|/,$query); $up_acc =~ s/\.\d+$//; $off_flag = 1; } elsif ($query =~ m/\|pdb\|/) { ($tmp, $gi, $pdb, $pdb_id, $pdb_chain) = split(/\|/,$query); $pdb_acc = $pdb_id . $pdb_chain; } } elsif ($query =~ m/^sp\|/) { ($pdb, $pdb_acc) = split(/\|/,$query); } elsif ($query =~ m/^pdb\|(\w{4})\|(\w)/) { $pdb_acc = $1 . $2; } else { $pdb_acc = $query; } # only get the first res_beg because it is used to calculate pdbaa_off @c:xxx $get_offsets_pdb->execute($pdb_acc); my ($res_beg, $pdb_beg, $pdb_end, $sp_beg, $sp_end) = $get_offsets_pdb->fetchrow_array(); $res_beg = 1 unless defined($res_beg); $pdb_beg = 1 unless defined($pdb_beg); $sp_beg = 1 unless defined($sp_beg); if (defined($sp_end) && $sp_end > $seq_len) {$seq_len = $sp_end;} if (defined($pdb_end) && $pdb_end > $seq_len) {$seq_len = $pdb_end;} # unless ($seq_len > 1) { # if (defined($sp_end)) { # $seq_len = $sp_end; # } # elsif (defined($pdb_end)) { # $seq_len = $pdb_end; # } # } $get_cathdoms_pdb->execute($pdb_acc); $annot_data{list} = get_cath_annots($lav, $get_cathdoms_pdb, $pdb_beg, $seq_len, $off_flag); return \%annot_data; } sub get_cath_annots { my ($lav, $get_annots, $sp_offset, $seq_length, $is_offset) = @_; my @cath_domains = (); # get the list of domains, sorted by start while ( my $row_href = $get_annots->fetchrow_hashref()) { # put in logic to subtract sp_offset when necessary if ($is_offset && $row_href->{p_start}) { $row_href->{seq_start} = $row_href->{p_start} - $sp_offset; $row_href->{seq_end} = $row_href->{p_stop} - $sp_offset; } else { $row_href->{seq_start} = $row_href->{s_start} - $sp_offset; $row_href->{seq_end} = $row_href->{s_stop} - $sp_offset; } if ($seq_length <= 1) { $seq_length = $row_href->{seq_end}; } else { $row_href->{seq_end} = $seq_length if ($row_href->{seq_end} > $seq_length); } $row_href->{info} =~ s/\s+/_/g; push @cath_domains, $row_href } return unless (scalar(@cath_domains)); # do a consistency check for (my $i=1; $i < scalar(@cath_domains); $i++) { if ($cath_domains[$i]->{seq_start} <= $cath_domains[$i-1]->{seq_end}) { my $delta = $cath_domains[$i]->{seq_start} - $cath_domains[$i-1]->{seq_end}; $cath_domains[$i-1]->{seq_end} -= $delta/2; $cath_domains[$i]->{seq_start} = $cath_domains[$i-1]->{seq_end}+1; } } if ($neg_doms) { my @ncath_domains; my $prev_dom={seq_end=>0}; for my $cur_dom ( @cath_domains) { if ($cur_dom->{seq_start} - $prev_dom->{seq_end} > $min_nodom) { my %new_dom = (seq_start=>$prev_dom->{seq_end}+1, seq_end => $cur_dom->{seq_start}-1, info=>'NODOM'); push @ncath_domains, \%new_dom; } push @ncath_domains, $cur_dom; $prev_dom = $cur_dom; } my %new_dom = (seq_start=>$prev_dom->{seq_end}+1, seq_end=>$seq_length, info=>'NODOM'); if ($new_dom{seq_end} > $new_dom{seq_start}) {push @ncath_domains, \%new_dom;} @cath_domains = @ncath_domains; } for my $cath (@cath_domains) { if ($class && $cath->{cath_class}) {$cath->{info} = $cath->{cath_class};} $cath->{info} = domain_name($cath->{info}); } my @feats = (); if ($lav) { for my $d_ref (@cath_domains) { push @feats, [$d_ref->{seq_start}, $d_ref->{seq_end}, $d_ref->{info} ]; } } else { for my $d_ref (@cath_domains) { push @feats, [$d_ref->{seq_start}, '-', $d_ref->{seq_end}, $d_ref->{info} ]; } } return \@feats; } # domain name takes a uniprot domain label, removes comments ( ; # truncated) and numbers and returns a canonical form. Thus: # Cortactin 6. # Cortactin 7; truncated. # becomes "Cortactin" # sub domain_name { my ($value) = @_; if (!defined($domains{$value})) { $domain_cnt++; $domains{$value} = $domain_cnt; } return $value; } __END__ =pod =head1 NAME ann_feats.pl =head1 SYNOPSIS ann_pdb_cath.pl --neg 'sp|P09488|GSTM1_NUMAN' | accession.file =head1 OPTIONS -h short help --help include description --lav produce lav2plt.pl annotation format, only show domains/repeats --neg-doms, -- report domains between annotated domains as NODOM (also --neg, --neg_doms) --min_nodom=10 -- minimum length between domains for NODOM --host, --user, --password, --port --db -- info for mysql database =head1 DESCRIPTION C extracts domain information from the pfam26 msyql database. Currently, the program works with database sequence descriptions in one of two formats: >pf26|649|O94823|AT10B_HUMAN -- RPD2_seqs (pf26 databases have auto_pfamseq in the second field) and >gi|1705556|sp|P54670.1|CAF1_DICDI C uses the C, C, and C tables of the C database to extract domain information on a protein. For proteins that have multiple domains associated with the same overlapping region (domains overlap by more than 1/3 of the domain length), C selects the domain annotation with the best C. When domains overlap by less than 1/3 of the domain length, they are shortened to remove the overlap. C is designed to be used by the B programs with the C<-V \!ann_pfam26.pl> or C<-V "\!ann_pfam26.pl --neg"> option. =head1 AUTHOR William R. Pearson, wrp@virginia.edu =cut fasta36-36.3.8i_14-Nov-2020/scripts/ann_pdb_vast.pl000077500000000000000000000203321433453312700213520ustar00rootroot00000000000000#!/usr/bin/env perl ################################################################ # copyright (c) 2014, 2015 by William R. Pearson and The Rector & # Visitors of the University of Virginia */ ################################################################ # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under this License is distributed on an "AS # IS" BASIS, WITHOUT WRRANTIES OR CONDITIONS OF ANY KIND, either # express or implied. See the License for the specific language # governing permissions and limitations under the License. ################################################################ # ann_pdb_vast.pl gets an annotation file from fasta36 -V with a line of the form: # gi|62822551|sp|P00502|GSTA1_RAT Glutathione S-transfer\n (at least from pir1.lseg) # # it must: # (1) read in the line # (2) parse it to get the up_acc # (3) return the tab delimited features # # this version is designed for various formats of the pdbaa/pdbaa_off NCBI files with the lines: # >gi|4388890|pdb|1GTUA|sp|P09488 or # >gi|4388890|pdb|1GTU|A # if I can find |sp|P09488, I will use that, otherwise I will use # |pdb|1GTU|A (concatenated) and a different part of the cath_dom # database # use warnings; use strict; use LWP::Simple; use Getopt::Long; use HTML::TableExtract; use Pod::Usage; use vars qw($host $db $port $user $pass); my ($neg_doms, $lav, $shelp, $help, $class) = (0, 0, 0, 0, 0); my ($min_nodom) = (10); my $color_sep_str = " :"; $color_sep_str = '~'; GetOptions( "host=s" => \$host, "db=s" => \$db, "lav" => \$lav, "neg" => \$neg_doms, "neg_doms" => \$neg_doms, "neg-doms" => \$neg_doms, "min_nodom=i" => \$min_nodom, "h|?" => \$shelp, "help" => \$help, ); pod2usage(1) if $shelp; pod2usage(exitstatus => 0, verbose => 2) if $help; pod2usage(1) unless (@ARGV || -p STDIN || -f STDIN); ################################################################ # strategy for connecting to NCBI to get list of domains my $db = "structure"; my $report = "FASTA"; my $pdb_acc_chain = ""; my $utils = "http://www.ncbi.nlm.nih.gov/entrez/eutils"; my $vast_url = "http://www.ncbi.nlm.nih.gov/Structure/vastplus/vastplus.cgi?cmd=v&uid="; my $esearch = "$utils/esearch.fcgi?db=structure&retmax=1&term="; ################################################################ my %domains = (NODOM=>0); my $domain_cnt = 0; my ($tmp, $gi, $sdb, $acc, $id, $use_acc); # get the query my ($query, $seq_len) = @ARGV; $seq_len = 1 unless $seq_len; $query =~ s/^>// if ($query); my @annots = (); #if it's a file I can open, read and parse it # unless ($query && $query =~ m/\|/) { if (! $query || -r $query) { while (my $a_line = <>) { $a_line =~ s/^>//; chomp $a_line; push @annots, show_annots($lav,$a_line); } } else { push @annots, show_annots($lav, "$query $seq_len"); } for my $seq_annot (@annots) { print ">",$seq_annot->{seq_info},"\n"; for my $annot (@{$seq_annot->{list}}) { if (!$lav && defined($domains{$annot->[-1]})) { $annot->[-1] .= $color_sep_str.$domains{$annot->[-1]}; } print join("\t",@$annot),"\n"; } } exit(0); sub show_annots { my ($lav, $annot_line) = @_; my ($query, $seq_len) = split(/\s+/,$annot_line); my %annot_data = (seq_info => $query); my ($tmp, $gi, $pdb, $pdb_acc, $pdb_id, $pdb_chain, $sdb, $up_acc, $off_flag); $off_flag = 0; if ($query =~ m/^gi\|/) { if ($query =~ m/\|sp\|/) { ($tmp, $gi, $pdb, $pdb_acc, $sdb, $up_acc) = split(/\|/,$query); $up_acc =~ s/\.\d+$//; $off_flag = 1; } elsif ($query =~ m/\|pdb\|/) { ($tmp, $gi, $pdb, $pdb_id, $pdb_chain) = split(/\|/,$query); $pdb_acc = $pdb_id . $pdb_chain; } } elsif ($query =~ m/^sp\|/) { ($pdb, $pdb_acc) = split(/\|/,$query); } elsif ($query =~ m/^pdb\|(\w{4})\|(\w)/) { $pdb_acc = $1 . $2; } else { $pdb_acc = $query; } # only get the first res_beg because it is used to calculate pdbaa_off @c:xxx $annot_data{list} = get_vast_annots($lav, $pdb_acc, $seq_len, $off_flag); return \%annot_data; } sub get_vast_annots { my ($lav, $pdb_acc, $seq_length) = @_; my $domain_href = get_vast_info($pdb_acc); return unless (scalar(@$domain_href)); # do a consistency check for (my $i=1; $i < scalar(@$domain_href); $i++) { if ($domain_href->[$i]{seq_start} <= $domain_href->[$i-1]{seq_end}) { my $delta = $domain_href->[$i]{seq_start} - $domain_href->[$i-1]{seq_end}; $domain_href->[$i-1]{seq_end} -= $delta/2; $domain_href->[$i]{seq_start} = $domain_href->[$i-1]{seq_end}+1; } } if ($neg_doms) { my @nvast_domains; my $prev_dom={seq_end=>0}; for my $cur_dom ( @$domain_href) { if ($cur_dom->{seq_start} - $prev_dom->{seq_end} > $min_nodom) { my %new_dom = (seq_start=>$prev_dom->{seq_end}+1, seq_end => $cur_dom->{seq_start}-1, info=>'NODOM'); push @nvast_domains, \%new_dom; } push @nvast_domains, $cur_dom; $prev_dom = $cur_dom; } my %new_dom = (seq_start=>$prev_dom->{seq_end}+1, seq_end=>$seq_length, info=>'NODOM'); if ($new_dom{seq_end} > $new_dom{seq_start}) {push @nvast_domains, \%new_dom;} $domain_href = \@nvast_domains; } my @feats = (); if ($lav) { for my $d_ref (@$domain_href) { push @feats, [$d_ref->{seq_start}, $d_ref->{seq_end}, $d_ref->{info} ]; } } else { for my $d_ref (@$domain_href) { push @feats, [$d_ref->{seq_start}, '-', $d_ref->{seq_end}, $d_ref->{info} ]; } } return \@feats; } ################################################################ # get_vast_info ( pdb_acc_chain pdb|1ABC|D # sub get_vast_info { my $pdb_acc_chain = shift @_; $pdb_acc_chain =~ s/^pdb\|//; my ($pdb_acc, $pdb_chain) = ($pdb_acc_chain =~ m/(\w{4})(\w)/); my $esearch_result = get($esearch . $pdb_acc . "[pdb+accession]"); # print "\nESEARCH RESULT: $esearch_result\n"; my ($Count) = ($esearch_result =~ m|(\d+)|s); my $mmdb_id = 0; ($mmdb_id) = ($esearch_result =~ m|(\d+)|s); my $vast_dom_html = get($vast_url.$mmdb_id); my $te = HTML::TableExtract->new(depth=>0, count=>0); $te->parse($vast_dom_html); my ($ts) = $te->tables(); my @ts_rows = $ts->rows(); my $row_header = shift(@ts_rows); # print "header:\t\t",join("\t",@$row_header),"\n"; my $current_chain = ""; my @domain_list = (); for my $row ( @ts_rows ) { if ($row->[0]) { ($current_chain) = ($row->[0] =~ m/^\[(\w+)\]/); } next unless ($current_chain eq $pdb_chain); next if ($row->[1] =~ m/^Entire/); my $range = $row->[2]; # $range can actually be a list of ranges. Need to remove the spaces $range =~ s/\s+//g; push @domain_list, $range; } # here we have the list of domain, indexed, but some domains will have multiple parts my @part_list = (); my $dom_cnt=1; for my $range (@domain_list) { my @parts = split(/,/,$range); for my $part ( @parts ) { my ($start, $end) = ($part =~ m/(\d+)\s*\-\s*(\d+)/); push @part_list, {info=>"VASTdom".$dom_cnt, seq_start=>$start, seq_end=>$end}; } $dom_cnt++; } @part_list = sort { $a->{seq_start} <=> $b->{seq_start} } @part_list; return \@part_list; } __END__ =pod =head1 NAME ann_feats.pl =head1 SYNOPSIS ann_pdb_vast.pl --neg 'sp|P09488|GSTM1_NUMAN' | accession.file =head1 OPTIONS -h short help --help include description --lav produce lav2plt.pl annotation format, only show domains/repeats --neg-doms, -- report domains between annotated domains as NODOM (also --neg, --neg_doms) --min_nodom=10 -- minimum length between domains for NODOM =head1 DESCRIPTION C extracts domain information from the pfam26 msyql database. Currently, the program works with database sequence descriptions in several formats: >pdb|3F6F|A -- database|accession >gi|262118558|pdb|3F6F|A -- with GI number C is designed to be used by the B programs with the C<-V \!ann_pfam26.pl> or C<-V "\!ann_pfam26.pl --neg"> option. =head1 AUTHOR William R. Pearson, wrp@virginia.edu =cut fasta36-36.3.8i_14-Nov-2020/scripts/ann_pfam28.pl000077500000000000000000000570641433453312700206610ustar00rootroot00000000000000#!/usr/bin/env perl ################################################################ # copyright (c) 2014,2015 by William R. Pearson and The Rector & # Visitors of the University of Virginia */ ################################################################ # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under this License is distributed on an "AS # IS" BASIS, WITHOUT WRRANTIES OR CONDITIONS OF ANY KIND, either # express or implied. See the License for the specific language # governing permissions and limitations under the License. ################################################################ # ann_pfam.pl gets an annotation file from fasta36 -V with a line of the form: # gi|62822551|sp|P00502|GSTA1_RAT Glutathione S-transfer\n (at least from pir1.lseg) # # it must: # (1) read in the line # (2) parse it to get the up_acc # (3) return the tab delimited features # # this version only annotates sequences known to Pfam:pfamseq: # and only provides domain information use warnings; use strict; use DBI; use Getopt::Long; use Pod::Usage; use vars qw($host $db $port $user $pass); my $hostname = `/bin/hostname`; ($host, $db, $port, $user, $pass) = ("wrpxdb.its.virginia.edu", "pfam31", 0, "web_user", "fasta_www"); #$host = 'xdb'; #$host = 'localhost'; #$db = 'RPD2_pfam28u'; my ($auto_reg,$rpd2_fams, $neg_doms, $vdoms, $lav, $no_doms, $no_clans, $pf_acc, $acc_comment, $bound_comment, $shelp, $help) = (0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0,); my ($no_over, $split_over, $over_fract) = (0, 0, 3.0); my $color_sep_str = " :"; $color_sep_str = '~'; my ($min_nodom, $min_vdom) = (10,10); GetOptions( "host=s" => \$host, "db=s" => \$db, "user=s" => \$user, "password=s" => \$pass, "port=i" => \$port, "lav" => \$lav, "acc_comment" => \$acc_comment, "bound_comment" => \$bound_comment, "no-over" => \$no_over, "no_over" => \$no_over, "split-over" => \$split_over, "split_over" => \$split_over, "over_fract" => \$over_fract, "over-fract" => \$over_fract, "no-clans" => \$no_clans, "no_clans" => \$no_clans, "neg" => \$neg_doms, "neg_doms" => \$neg_doms, "neg-doms" => \$neg_doms, "min_nodom=i" => \$min_nodom, "vdoms" => \$vdoms, "v_doms" => \$vdoms, "pfacc" => \$pf_acc, "RPD2" => \$rpd2_fams, "auto_reg" => \$auto_reg, "h|?" => \$shelp, "help" => \$help, ); pod2usage(1) if $shelp; pod2usage(exitstatus => 0, verbose => 2) if $help; pod2usage(1) unless (@ARGV || -p STDIN || -f STDIN); my $connect = "dbi:mysql(AutoCommit=>1,RaiseError=>1):database=$db"; $connect .= ";host=$host" if $host; $connect .= ";port=$port" if $port; my $dbh = DBI->connect($connect, $user, $pass ) or die $DBI::errstr; my %annot_types = (); my %domains = (NODOM=>0); my %domain_clan = (NODOM => {clan_id => 'NODOM', clan_acc=>0, domain_cnt=>0}); my @domain_list = (0); my $domain_cnt = 0; my $pfamA_reg_full = 'pfamA_reg_full_significant'; my $get_annot_sub = \&get_pfam_annots; my @pfam_fields = qw(seq_start seq_end model_start model_end model_length pfamA_acc pfamA_id auto_pfamA_reg_full domain_evalue_score as evalue length); my $get_pfam_acc = $dbh->prepare(<prepare(<prepare(<prepare(<prepare(<// if ($query); my @annots = (); my %rpd2_clan_fams = (); if ($rpd2_fams) { $get_rpd2_clans->execute(); my ($auto_pfam, $auto_clan); while (($auto_pfam, $auto_clan)=$get_rpd2_clans->fetchrow_array()) { $rpd2_clan_fams{$auto_pfam} = $auto_clan; } } #if it's a file I can open, read and parse it unless ($query && $query =~ m/[\|:]/) { while (my $a_line = <>) { $a_line =~ s/^>//; chomp $a_line; push @annots, show_annots($a_line, $get_annot_sub); } } else { push @annots, show_annots("$query $seq_len", $get_annot_sub); } for my $seq_annot (@annots) { print ">",$seq_annot->{seq_info},"\n"; for my $annot (@{$seq_annot->{list}}) { if (!$lav && defined($domains{$annot->[-1]})) { my ($a_name, $a_num) = domain_num($annot->[-1],$domains{$annot->[-1]}); $annot->[-1] = $a_name; my $tmp_a_num = $a_num; $tmp_a_num =~ s/v$//; if ($acc_comment) { $annot->[-1] .= "{$domain_list[$tmp_a_num]}"; } if ($bound_comment) { $annot->[-1] .= $color_sep_str.$annot->[0].":".$annot->[2]; } $annot->[-1] .= $color_sep_str.$a_num; } print join("\t",@$annot),"\n"; } } exit(0); sub show_annots { my ($query_len, $get_annot_sub) = @_; my ($annot_line, $seq_len) = split(/\t/,$query_len); my $pfamA_acc; my %annot_data = (seq_info=>$annot_line); $use_acc = 1; $get_annots_sql = $get_pfam_acc; if ($annot_line =~ m/^pf\d+\|/) { ($sdb, $gi, $pfamA_acc, $acc, $id) = split(/\|/,$annot_line); # $dbh->do("use RPD2_pfam"); } elsif ($annot_line =~ m/^gi\|/) { ($tmp, $gi, $sdb, $acc, $id) = split(/\|/,$annot_line); if ($sdb =~ m/ref/) { $get_annots_sql = $get_pfam_refacc; } } elsif ($annot_line =~ m/^(sp|tr)\|/) { ($sdb, $acc, $id) = split(/\|/,$annot_line); } elsif ($annot_line =~ m/^ref\|/) { ($sdb, $acc) = split(/\|/,$annot_line); $get_annots_sql = $get_pfam_refacc; } elsif ($annot_line =~ m/^(SP|TR):/i) { ($sdb, $id) = split(/:/,$annot_line); $use_acc = 0; } elsif ($annot_line !~ m/\|/) { # new NCBI swissprot format $use_acc =1; $sdb = 'sp'; ($acc) = split(/\s+/,$annot_line); } # remove version number unless ($use_acc) { $get_annots_sql = $get_pfam_id; $get_annots_sql->execute($id); } else { unless ($acc) { warn "missing acc in $annot_line"; next; } else { $acc =~ s/\.\d+$//; $get_annots_sql->execute($acc); } } $annot_data{list} = $get_annot_sub->($get_annots_sql, $seq_len); return \%annot_data; } sub get_pfam_annots { my ($get_annots, $seq_length) = @_; $seq_length = 0 unless $seq_length; my @pf_domains = (); # get the list of domains, sorted by start # $row_href has: seq_start, seq_end, model_start, model_end, model_length, # pfamA_acc, pfamA_id, auto_pfamA_reg_full, # domain_evalue_score as evalue, length while ( my $row_href = $get_annots->fetchrow_hashref()) { if ($auto_reg) { $row_href->{info} = $row_href->{auto_pfamA_reg_full}; } elsif ($pf_acc) { $row_href->{info} = $row_href->{pfamA_acc}; } else { $row_href->{info} = $row_href->{pfamA_id}; } if ($row_href && $row_href->{length} > $seq_length && $seq_length == 0) { $seq_length = $row_href->{length}; } next if ($row_href->{seq_start} >= $seq_length); if ($row_href->{seq_end} > $seq_length) { $row_href->{seq_end} = $seq_length; } push @pf_domains, $row_href } # before checking for domain overlap, check for "split-domains" # (self-unbound) by looking for runs of the same domain that are # ordered by model_start if (scalar(@pf_domains) > 1) { my @j_domains; #joined domains my @tmp_domains = @pf_domains; my $prev_dom = shift(@tmp_domains); for my $curr_dom (@tmp_domains) { # to join domains: # (1) the domains must be in order by model_start/end coordinates # (3) joining the domains cannot make the total combination too long # check for model and sequence consistency if (($prev_dom->{pfamA_acc} eq $curr_dom->{pfamA_acc}) # same family && $prev_dom->{model_start} < $curr_dom->{model_start} # model check && $prev_dom->{model_end} < $curr_dom->{model_end} && ($curr_dom->{model_start} > $prev_dom->{model_end} * 0.80 # limit overlap || $curr_dom->{model_start} < $prev_dom->{model_end} * 1.25) && ((($curr_dom->{model_end} - $curr_dom->{model_start}+1)/$curr_dom->{model_length} + ($prev_dom->{model_end} - $prev_dom->{model_start}+1)/$prev_dom->{model_length}) < 1.33) ) { # join them by updating $prev_dom $prev_dom->{seq_end} = $curr_dom->{seq_end}; $prev_dom->{model_end} = $curr_dom->{model_end}; $prev_dom->{auto_pfamA_reg_full} = $prev_dom->{auto_pfamA_reg_full} . ";". $curr_dom->{auto_pfamA_reg_full}; $prev_dom->{evalue} = ($prev_dom->{evalue} < $curr_dom->{evalue} ? $prev_dom->{evalue} : $curr_dom->{evalue}); } else { push @j_domains, $prev_dom; $prev_dom = $curr_dom; } } push @j_domains, $prev_dom; @pf_domains = @j_domains; if ($no_over) { # for either $no_over or $split_over, check for overlapping domains and edit/split them my @tmp_domains = @pf_domains; # allow shifts from copy of @pf_domains my @save_domains = (); # where the new domains go my $prev_dom = shift @tmp_domains; while (my $curr_dom = shift @tmp_domains) { my @overlap_domains = ($prev_dom); my $diff = $prev_dom->{seq_end} - $curr_dom->{seq_start}; my ($prev_len, $cur_len) = ($prev_dom->{seq_end}-$prev_dom->{seq_start}+1, $curr_dom->{seq_end}-$curr_dom->{seq_start}+1); my $inclusion = ((($curr_dom->{seq_start} >= $prev_dom->{seq_start}) # start is right && end is left && ($curr_dom->{seq_end} <= $prev_dom->{seq_end})) || # -- curr inside prev (($curr_dom->{seq_start} <= $prev_dom->{seq_start}) # start is left && end is right && ($curr_dom->{seq_end} >= $prev_dom->{seq_end}))); # -- prev is inside curr my $longer_len = ($prev_len > $cur_len) ? $prev_len : $cur_len; # check for overlap > domain_length/$over_fract while ($inclusion || ($diff > 0 && $diff > $longer_len/$over_fract)) { push @overlap_domains, $curr_dom; $curr_dom = shift @tmp_domains; last unless $curr_dom; $diff = $prev_dom->{seq_end} - $curr_dom->{seq_start}; ($prev_len, $cur_len) = ($prev_dom->{seq_end}-$prev_dom->{seq_start}+1, $curr_dom->{seq_end}-$curr_dom->{seq_start}+1); $longer_len = ($prev_len > $cur_len) ? $prev_len : $cur_len; $inclusion = ((($curr_dom->{seq_start} >= $prev_dom->{seq_start}) && ($curr_dom->{seq_end} <= $prev_dom->{seq_end})) || (($curr_dom->{seq_start} <= $prev_dom->{seq_start}) && ($curr_dom->{seq_end} >= $prev_dom->{seq_end}))); } # check for overlapping domains; >1 because $prev_dom is always there if (scalar(@overlap_domains) > 1 ) { # if $rpd2_fams, check for a chosen one for my $dom ( @overlap_domains) { $dom->{evalue} = 1.0 unless defined($dom->{evalue}); } @overlap_domains = sort { $a->{evalue} <=> $b->{evalue} } @overlap_domains; $prev_dom = $overlap_domains[0]; } # $prev_dom should be the best of the overlaps, and we are no longer overlapping > dom_length/3 push @save_domains, $prev_dom; $prev_dom = $curr_dom; } if ($prev_dom) { push @save_domains, $prev_dom; } @pf_domains = @save_domains; # now check for smaller overlaps for (my $i=1; $i < scalar(@pf_domains); $i++) { if ($pf_domains[$i-1]->{seq_end} >= $pf_domains[$i]->{seq_start}) { my $overlap = $pf_domains[$i-1]->{seq_end} - $pf_domains[$i]->{seq_start}; $pf_domains[$i-1]->{seq_end} -= int($overlap/2); $pf_domains[$i]->{seq_start} = $pf_domains[$i-1]->{seq_end}+1; } } } elsif ($split_over) { # here, everything that overlaps by > $min_vdom should be split into a separate domain my @save_domains = (); # where the new domains go # check to see if one domain is included (or overlapping) more # than xx% of the other. If so, pick the longer one my ($prev_dom, $curr_dom) = ($pf_domains[0],0) ; for (my $i=1; $i < scalar(@pf_domains); $i++) { $curr_dom = $pf_domains[$i]; my ($prev_len, $cur_len) = ($prev_dom->{seq_end}-$prev_dom->{seq_start}+1, $curr_dom->{seq_end}-$curr_dom->{seq_start}+1); my $longer_len = ($prev_len > $cur_len) ? $prev_len : $cur_len; if (($curr_dom->{seq_start} >= $prev_dom->{seq_start}) && ($curr_dom->{seq_end} <= $prev_dom->{seq_end}) && $cur_len / $prev_len > 0.80) { # $prev_dom stays the same, $curr_dom deleted next; } elsif (($curr_dom->{seq_start} <= $prev_dom->{seq_start}) && ($curr_dom->{seq_end} >= $prev_dom->{seq_end}) && $prev_len / $cur_len > 0.80) { $prev_dom = $curr_dom; # this should delete $prev_dom next; } if ($prev_dom->{seq_end} >= $curr_dom->{seq_start} + $min_vdom) { my ($l_seq_end, $r_seq_start) = ($curr_dom->{seq_start}-1, $prev_dom->{seq_end}+1); $prev_dom->{seq_end} = $l_seq_end; push @save_domains, $prev_dom; my $new_dom = {seq_start => $l_seq_end+1, seq_end=>$r_seq_start-1, model_length => -1, pfamA_acc=>$prev_dom->{pfamA_acc}."/".$curr_dom->{pfamA_acc}, pfamA_id=>$prev_dom->{pfamA_id}."/".$curr_dom->{pfamA_id}, }; if ($pf_acc) { $new_dom->{info} = $new_dom->{pfamA_acc}; } else { $new_dom->{info} = $new_dom->{pfamA_id}; } push @save_domains, $new_dom; $curr_dom->{seq_start} = $r_seq_start; $prev_dom = $curr_dom; } else { push @save_domains, $prev_dom; $prev_dom = $curr_dom; } } push @save_domains, $prev_dom; @pf_domains = @save_domains; } } # $vdoms -- virtual Pfam domains -- the equivalent of $neg_doms, # but covering parts of a Pfam model that are not annotated. split # domains have been joined, so simply check beginning and end of # each domain (but must also check for bounded-ness) # only add when 10% or more is missing and missing length > $min_nodom if ($vdoms && scalar(@pf_domains)) { my @vpf_domains; my $curr_dom = $pf_domains[0]; my $length = $curr_dom->{length}; my $prev_dom={seq_end=>0, pfamA_acc=>''}; my $prev_dom_end = 0; my $next_dom_start = $length+1; for (my $dom_ix=0; $dom_ix < scalar(@pf_domains); $dom_ix++ ) { $curr_dom = $pf_domains[$dom_ix]; my $pfamA = $curr_dom->{pfamA_acc}; # first, look left, is there a domain there (if there is, # it should be updated right # my $min_vdom = $curr_dom->{model_length} / 10; if ($curr_dom->{model_length} < $min_vdom) { push @vpf_domains, $curr_dom; next; } if ($prev_dom->{pfamA_acc}) { # look for previous domain $prev_dom_end = $prev_dom->{seq_end}; } # there is a domain to the left, how much room is available? my $left_dom_len = min($curr_dom->{seq_start}-$prev_dom_end-1, $curr_dom->{model_start}-1); if ( $left_dom_len > $min_vdom) { # there is room for a virtual domain my %new_dom = (seq_start=> $curr_dom->{seq_start}-$left_dom_len, seq_end => $curr_dom->{seq_start}-1, info=>'@'.$curr_dom->{info}, model_length=>$curr_dom->{model_length}, model_end => $curr_dom->{model_start}-1, model_start => $left_dom_len, pfamA_acc=>$pfamA, ); push @vpf_domains, \%new_dom; } # save the current domain push @vpf_domains, $curr_dom; $prev_dom = $curr_dom; if ($dom_ix < $#pf_domains) { # there is a domain to the right # first, give all the extra space to the first domain (no splitting) $next_dom_start = $pf_domains[$dom_ix+1]->{seq_start}; } else { $next_dom_start = $length; } # is there room for a virtual domain right my $right_dom_len = min($next_dom_start-$curr_dom->{seq_end}-1, # space available $curr_dom->{model_length}-$curr_dom->{model_end} # space needed ); if ( $right_dom_len > $min_vdom) { my %new_dom = (seq_start=> $curr_dom->{seq_end}+1, seq_end=> $curr_dom->{seq_end}+$right_dom_len, info=>'@'.$curr_dom->{info}, model_length => $curr_dom->{model_length}, pfamA_acc=> $pfamA, ); push @vpf_domains, \%new_dom; $prev_dom = \%new_dom; } } # all done, check for last one # $curr_dom=$pf_domains[-1]; # # my $min_vdom = $curr_dom->{model_length}/10; # my $right_dom_len = min($length - $curr_dom->{seq_end}+1, # space available # $curr_dom->{model_length}-$curr_dom->{model_end} # space needed # ); # if ($right_dom_len > $min_vdom) { # my %new_dom = (seq_start=> $curr_dom->{seq_end}+1, # seq_end => $curr_dom->{seq_end}+$right_dom_len, # info=>'@'.$curr_dom->{pfamA_acc}, # model_len=> $curr_dom->{model_len}, # pfamA_acc => $curr_dom->{pfamA_acc}, # model_start => $curr_dom->{model_end}+1, # model_end => $curr_dom->{model_len}, # ); # push @vpf_domains, \%new_dom; # } # @vpf_domains has both old @pf_domains and new neg-domains @pf_domains = @vpf_domains; } if ($neg_doms) { my @npf_domains; my $prev_dom={seq_end=>0}; for my $curr_dom ( @pf_domains) { if ($curr_dom->{seq_start} - $prev_dom->{seq_end} > $min_nodom) { my %new_dom = (seq_start=>$prev_dom->{seq_end}+1, seq_end => $curr_dom->{seq_start}-1, info=>'NODOM'); push @npf_domains, \%new_dom; } push @npf_domains, $curr_dom; $prev_dom = $curr_dom; } if ($seq_length - $prev_dom->{seq_end} > $min_nodom) { my %new_dom = (seq_start=>$prev_dom->{seq_end}+1, seq_end=>$seq_length, info=>'NODOM'); if ($new_dom{seq_end} > $new_dom{seq_start}) { push @npf_domains, \%new_dom; } } # @npf_domains has both old @pf_domains and new neg-domains @pf_domains = @npf_domains; } # now make sure we have useful names: colors for my $pf (@pf_domains) { $pf->{info} = domain_name($pf->{info}, $pf->{pfamA_acc}); } my @feats = (); for my $d_ref (@pf_domains) { if ($lav) { push @feats, [$d_ref->{seq_start}, $d_ref->{seq_end}, $d_ref->{info}]; } else { push @feats, [$d_ref->{seq_start}, '-', $d_ref->{seq_end}, $d_ref->{info} ]; # push @feats, [$d_ref->{seq_end}, ']', '-', ""]; } } return \@feats; } sub min { my ($arg1, $arg2) = @_; return ($arg1 <= $arg2 ? $arg1 : $arg2); } sub max { my ($arg1, $arg2) = @_; return ($arg1 >= $arg2 ? $arg1 : $arg2); } # domain name takes a uniprot domain label, removes comments ( ; # truncated) and numbers and returns a canonical form. Thus: # Cortactin 6. # Cortactin 7; truncated. # becomes "Cortactin" # sub domain_name { my ($value, $pfamA_acc) = @_; my $is_virtual = 0; if ($value =~ m/^@/) { $is_virtual = 1; $value =~ s/^@//; } # check for clan: if ($no_clans) { if (! defined($domains{$value})) { $domain_clan{$value} = 0; $domains{$value} = ++$domain_cnt; push @domain_list, $pfamA_acc; } } elsif (!defined($domain_clan{$value})) { ## only do this for new domains, old domains have known mappings ## ways to highlight the same domain: # (1) for clans, substitute clan name for family name # (2) for clans, use the same color for the same clan, but don't change the name # (3) for clans, combine family name with clan name, but use colors based on clan # check to see if it's a clan $get_pfam_clan->execute($pfamA_acc); my $pfam_clan_href=0; if ($pfam_clan_href=$get_pfam_clan->fetchrow_hashref()) { # is a clan my ($clan_id, $clan_acc) = @{$pfam_clan_href}{qw(clan_id clan_acc)}; # now check to see if we have seen this clan before (if so, do not increment $domain_cnt) my $c_value = "C." . $clan_id; if ($pf_acc) {$c_value = $clan_acc;} $domain_clan{$value} = {clan_id => $clan_id, clan_acc => $clan_acc}; if ($domains{$c_value}) { $domain_clan{$value}->{domain_cnt} = $domains{$c_value}; $value = $c_value; } else { $domain_clan{$value}->{domain_cnt} = ++ $domain_cnt; $value = $c_value; $domains{$value} = $domain_cnt; push @domain_list, $pfamA_acc; } } else { # not a clan $domain_clan{$value} = 0; $domains{$value} = ++$domain_cnt; push @domain_list, $pfamA_acc; } } elsif ($domain_clan{$value} && $domain_clan{$value}->{clan_acc}) { if ($pf_acc) {$value = $domain_clan{$value}->{clan_acc};} else { $value = "C." . $domain_clan{$value}->{clan_id}; } } if ($is_virtual) { $domains{'@'.$value} = $domains{$value}; $value = '@'.$value; } return $value; } sub domain_num { my ($value, $number) = @_; if ($value =~ m/^@/) { $value =~ s/^@/v/; $number = $number."v"; } return ($value, $number); } __END__ =pod =head1 NAME ann_pfam28.pl =head1 SYNOPSIS ann_pfam28.pl --neg-doms --vdoms 'sp|P09488|GSTM1_NUMAN' | accession.file =head1 OPTIONS -h short help --help include description --no-over : generate non-overlapping domains (equivalent to ann_pfam.pl) --split-over : overlaps of two domains generate a new hybrid domain --no-clans : do not use clans with multiple families from same clan --neg-doms : report domains between annotated domains as NODOM (also --neg, --neg_doms) --vdoms : produce "virtual domains" using model_start, model_end for partial pfam domains --min_nodom=10 : minimum length between domains for NODOM --host, --user, --password, --port --db : info for mysql database =head1 DESCRIPTION C extracts domain information from the pfam msyql database. Currently, the program works with database sequence descriptions in several formats: >gi|1705556|sp|P54670.1|CAF1_DICDI >sp|P09488|GSTM1_HUMAN >sp:CALM_HUMAN C uses the C, C, and C tables of the C database to extract domain information on a protein. If the C<--no-over> option is set, overlapping domains are selected and edited to remove overlaps. For proteins with multiple overlapping domains (domains overlap by more than 1/3 of the domain length), C selects the domain annotation with the best C. When domains overlap by less than 1/3 of the domain length, they are shortened to remove the overlap. If the C<--split-over> option is set, if two domains overlap, the overlapping region is split out of the domains and labeled as a new, virtual-lie, domain. If one domain is internal to another and spans 80% of the domain, the shorter domain is removed. C is designed to be used by the B programs with the C<-V \!ann_pfam28.pl> or C<-V "\!ann_pfam28.pl --neg"> option. =head1 AUTHOR William R. Pearson, wrp@virginia.edu =cut fasta36-36.3.8i_14-Nov-2020/scripts/ann_pfam30_tmptbl.pl000077500000000000000000000660721433453312700222330ustar00rootroot00000000000000#!/usr/bin/env perl ################################################################ # copyright (c) 2014,2015 by William R. Pearson and The Rector & # Visitors of the University of Virginia */ ################################################################ # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under this License is distributed on an "AS # IS" BASIS, WITHOUT WRRANTIES OR CONDITIONS OF ANY KIND, either # express or implied. See the License for the specific language # governing permissions and limitations under the License. ################################################################ # ann_pfam.pl gets an annotation file from fasta36 -V with a line of the form: # gi|62822551|sp|P00502|GSTA1_RAT Glutathione S-transfer\n (at least from pir1.lseg) # # it must: # (1) read in the line # (2) parse it to get the up_acc # (3) return the tab delimited features # # this is the first version that works with the new Pfam strategy of # separating Uniprot reference sequences from the rest of uniprot. as # a result, it is possible that 2 SQL queries will be required, one to # pfamA_reg_full_significant and a second to uniprot_reg_full. # modified 15-Jan-2017 to reduce the number of calls when the same # accession is present multiple times. Accessions are saved in a hash # than ensures uniqueness. # # Uses tmp_annot.temporary table for more rapid joins. $user must have # create temporary tables/select permissions for tmp_annot # use warnings; use strict; use DBI; use Getopt::Long; use Pod::Usage; use File::Temp qw/tempfile/; use vars qw($host $db $port $user $pass); my $hostname = `/bin/hostname`; ($host, $db, $port, $user, $pass) = ("wrpxdb.its.virginia.edu", "pfam30", 0, "web_user", "fasta_www"); #$host = 'xdb'; #$host = 'localhost'; #$db = 'RPD2_pfam28u'; my ($auto_reg,$rpd2_fams, $neg_doms, $vdoms, $lav, $no_doms, $no_clans, $pf_acc, $acc_comment, $bound_comment, $shelp, $help) = (0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0,); my ($no_over, $split_over, $over_fract) = (0, 0, 3.0); my ($color_sep_str, $show_color) = (" :",1); $color_sep_str = '~'; my ($min_nodom, $min_vdom) = (10,10); GetOptions( "host=s" => \$host, "db=s" => \$db, "user=s" => \$user, "password=s" => \$pass, "port=i" => \$port, "lav" => \$lav, "acc_comment" => \$acc_comment, "bound_comment" => \$bound_comment, "color!" => \$show_color, "no-over" => \$no_over, "no_over" => \$no_over, "split-over" => \$split_over, "split_over" => \$split_over, "over_fract" => \$over_fract, "over-fract" => \$over_fract, "no-clans" => \$no_clans, "no_clans" => \$no_clans, "neg" => \$neg_doms, "neg_doms" => \$neg_doms, "neg-doms" => \$neg_doms, "min_nodom=i" => \$min_nodom, "vdoms" => \$vdoms, "v_doms" => \$vdoms, "pfacc" => \$pf_acc, "RPD2" => \$rpd2_fams, "auto_reg" => \$auto_reg, "h|?" => \$shelp, "help" => \$help, ); pod2usage(1) if $shelp; pod2usage(exitstatus => 0, verbose => 2) if $help; pod2usage(1) unless (@ARGV || -p STDIN || -f STDIN); my $connect = "dbi:mysql(AutoCommit=>1,RaiseError=>1):database=$db"; $connect .= ";host=$host" if $host; $connect .= ";port=$port" if $port; my $dbh = DBI->connect($connect, $user, $pass ) or die $DBI::errstr; my %annot_types = (); my %domains = (NODOM=>0); my %domain_clan = (NODOM => {clan_id => 'NODOM', clan_acc=>0, domain_cnt=>0}); my @domain_list = (0); my $domain_cnt = 0; my $pfamA_reg_full = 'pfamA_reg_full_significant'; my $uniprot_reg_full = 'uniprot_reg_full'; my @pfam_fields = qw(seq_start seq_end model_start model_end model_length pfamA_acc pfamA_id auto_pfamA_reg_full evalue length); my @upfam_fields = qw(seq_start seq_end model_start model_end model_length pfamA_acc pfamA_id auto_uniprot_reg_full length); my $get_pfam_acc = $dbh->prepare(<prepare(<prepare(<prepare(<prepare(<prepare(<prepare(<prepare(<do(<// if ($query); my @annots = (); my %annot_set = (); my %rpd2_clan_fams = (); if ($rpd2_fams) { $get_rpd2_clans->execute(); my ($auto_pfam, $auto_clan); while (($auto_pfam, $auto_clan)=$get_rpd2_clans->fetchrow_array()) { $rpd2_clan_fams{$auto_pfam} = $auto_clan; } } #if it's a file I can open, read and parse it #unless ($query && $query =~ m/[\|:]/) { if (! $query || -r $query) { while (my $a_line = <>) { $a_line =~ s/^>//; chomp $a_line; push @annots, show_annots($a_line); } } else { push @annots, show_annots("$query\t$seq_len"); } # @annots has a list of id's or annotations # write to temporary file, load data local infile, join to get results my ($fh, $temp_file) = tempfile(TEMPLATE=>'accannXXXXX'); my @u_annots = keys %annot_set; print $fh join("\n",@u_annots); close($fh); $dbh->do("load data local infile '$temp_file' into table tmp_annot.targets"); unlink($temp_file); # $get_annots_sql->execute(); # while (my $annot_ar = $get_annots_sql->fetchrow_arrayref()) { # my %annot_data = (); # @annot_data{@pfam_fields} = @{$annot_ar}[1..10]; # if (!defined($annot_set{$annot_ar->[0]}->{list})) { # $annot_set{$annot_ar->[0]}->{list} = [\%annot_data]; # } # else { # push @{$annot_set{$annot_ar->[0]}->{list}}, \%annot_data; # } # } $get_annots_sql_u->execute(); while (my $annot_hr = $get_annots_sql_u->fetchrow_hashref()) { if (!defined($annot_set{$annot_hr->{t_acc}}->{list})) { $annot_set{$annot_hr->{t_acc}}->{list} = [$annot_hr]; } else { push @{$annot_set{$annot_hr->{t_acc}}->{list}}, $annot_hr; } } for my $u_acc (@u_annots) { map_pfam_annots($annot_set{$u_acc}); } for my $seq_annot (@annots) { next unless $seq_annot; my $annot_r = $annot_set{$seq_annot}; print ">",$annot_r->{seq_info},"\n"; for my $annot (@{$annot_r->{list}}) { $annot->{dash} = '-'; if (defined($domains{$annot->{info}})) { my ($a_name, $a_num) = domain_num($annot->{info},$domains{$annot->{info}}); $annot->{info} = $a_name; my $tmp_a_num = $a_num; $tmp_a_num =~ s/v$//; if ($acc_comment) { $annot->{info} .= "{$domain_list[$tmp_a_num]}"; } if ($bound_comment) { $annot->{info} .= $color_sep_str.$annot->{seq_start}.":".$annot->{seq_end}; } elsif ($show_color) { $annot->{info} .= $color_sep_str.$a_num; } } print join("\t",@{$annot}{@{$out_list_r}}),"\n"; } } exit(0); sub show_annots { my ($query_len) = @_; my ($annot_line, $seq_len) = split(/\t/,$query_len); my $pfamA_acc; $use_acc = 1; $get_annots_sql = $get_pfam_acc; $get_annots_sql_u = $get_upfam_acc; if ($annot_line =~ m/^pf\d+\|/) { ($sdb, $gi, $pfamA_acc, $acc, $id) = split(/\|/,$annot_line); # $dbh->do("use RPD2_pfam"); } elsif ($annot_line =~ m/^gi\|/) { ($tmp, $gi, $sdb, $acc, $id) = split(/\|/,$annot_line); if ($sdb =~ m/ref/) { $get_annots_sql = $get_pfam_refacc; $get_annots_sql_u = $get_upfam_refacc; } } elsif ($annot_line =~ m/^(sp|tr)\|/) { ($sdb, $acc, $id) = split(/\|/,$annot_line); } elsif ($annot_line =~ m/^ref\|/) { ($sdb, $acc) = split(/\|/,$annot_line); $get_annots_sql = $get_pfam_refacc; $get_annots_sql_u = $get_upfam_refacc; } elsif ($annot_line =~ m/^(SP|TR):/i) { ($sdb, $id) = split(/:/,$annot_line); $use_acc = 0; } elsif ($annot_line !~ m/\|/ && $annot_line !~ m/:/) { $use_acc = 1; ($acc) = split(/\s+/,$annot_line); } # deal with no-database SwissProt/NR else { ($acc)=($annot_line =~ /^(\S+)/); } # here we have an $acc or an $id: check to see if we have the data my %annot_data = (seq_info=>$annot_line, length=>$seq_len); my $annot_key = ''; unless ($use_acc) { next if ($annot_set{$id}); $annot_set{$id} = \%annot_data; $annot_key = $id; $get_annots_sql = $get_pfam_id; } else { unless ($acc) { warn "missing acc in $annot_line"; return ""; } else { $acc =~ s/\.\d+$//; next if ($annot_set{$acc}); $annot_set{$acc} = \%annot_data; $annot_key = $acc; } } return $annot_key; } sub map_pfam_annots { my ($annot_ref) = @_; my $seq_length = $annot_ref->{length}; my $pf_domains_r = $annot_ref->{list}; my $row_href=$annot_ref->{list}[0]; if ($row_href->{length} && $row_href->{length} > $seq_length && $seq_length == 0) { $annot_ref->{length} = $seq_length = $row_href->{length}; } # fill in {info} field for my $pf_dom (@$pf_domains_r) { if ($auto_reg) { $pf_dom->{info} = $pf_dom->{auto_pfamA_reg_full}; } elsif ($pf_acc) { $pf_dom->{info} = $pf_dom->{pfamA_acc}; } else { $pf_dom->{info} = $pf_dom->{pfamA_id}; } } # before checking for domain overlap, check for "split-domains" # (self-unbound) by looking for runs of the same domain that are # ordered by model_start if (scalar(@{$pf_domains_r}) > 1) { my @j_domains; #joined domains my @tmp_domains = @{$pf_domains_r}; my $prev_dom = shift(@tmp_domains); for my $curr_dom (@tmp_domains) { # to join domains: # (1) the domains must be in order by model_start/end coordinates # (3) joining the domains cannot make the total combination too long # check for model and sequence consistency if (($prev_dom->{pfamA_acc} eq $curr_dom->{pfamA_acc}) # same family && $prev_dom->{model_start} < $curr_dom->{model_start} # model check && $prev_dom->{model_end} < $curr_dom->{model_end} && ($curr_dom->{model_start} > $prev_dom->{model_end} * 0.80 # limit overlap || $curr_dom->{model_start} < $prev_dom->{model_end} * 1.25) && ((($curr_dom->{model_end} - $curr_dom->{model_start}+1)/$curr_dom->{model_length} + ($prev_dom->{model_end} - $prev_dom->{model_start}+1)/$prev_dom->{model_length}) < 1.33) ) { # join them by updating $prev_dom $prev_dom->{seq_end} = $curr_dom->{seq_end}; $prev_dom->{model_end} = $curr_dom->{model_end}; $prev_dom->{auto_pfamA_reg_full} = $prev_dom->{auto_pfamA_reg_full} . ";". $curr_dom->{auto_pfamA_reg_full}; $prev_dom->{evalue} = ($prev_dom->{evalue} < $curr_dom->{evalue} ? $prev_dom->{evalue} : $curr_dom->{evalue}); } else { push @j_domains, $prev_dom; $prev_dom = $curr_dom; } } push @j_domains, $prev_dom; @{$pf_domains_r} = @j_domains; if ($no_over) { # for either $no_over or $split_over, check for overlapping domains and edit/split them my @tmp_domains = @{$pf_domains_r}; # allow shifts from copy of @pf_domains my @save_domains = (); # where the new domains go my $prev_dom = shift @tmp_domains; while (my $curr_dom = shift @tmp_domains) { my @overlap_domains = ($prev_dom); my $diff = $prev_dom->{seq_end} - $curr_dom->{seq_start}; my ($prev_len, $cur_len) = ($prev_dom->{seq_end}-$prev_dom->{seq_start}+1, $curr_dom->{seq_end}-$curr_dom->{seq_start}+1); my $inclusion = ((($curr_dom->{seq_start} >= $prev_dom->{seq_start}) # start is right && end is left && ($curr_dom->{seq_end} <= $prev_dom->{seq_end})) || # -- curr inside prev (($curr_dom->{seq_start} <= $prev_dom->{seq_start}) # start is left && end is right && ($curr_dom->{seq_end} >= $prev_dom->{seq_end}))); # -- prev is inside curr my $longer_len = ($prev_len > $cur_len) ? $prev_len : $cur_len; # check for overlap > domain_length/$over_fract while ($inclusion || ($diff > 0 && $diff > $longer_len/$over_fract)) { push @overlap_domains, $curr_dom; $curr_dom = shift @tmp_domains; last unless $curr_dom; $diff = $prev_dom->{seq_end} - $curr_dom->{seq_start}; ($prev_len, $cur_len) = ($prev_dom->{seq_end}-$prev_dom->{seq_start}+1, $curr_dom->{seq_end}-$curr_dom->{seq_start}+1); $longer_len = ($prev_len > $cur_len) ? $prev_len : $cur_len; $inclusion = ((($curr_dom->{seq_start} >= $prev_dom->{seq_start}) && ($curr_dom->{seq_end} <= $prev_dom->{seq_end})) || (($curr_dom->{seq_start} <= $prev_dom->{seq_start}) && ($curr_dom->{seq_end} >= $prev_dom->{seq_end}))); } # check for overlapping domains; >1 because $prev_dom is always there if (scalar(@overlap_domains) > 1 ) { # if $rpd2_fams, check for a chosen one for my $dom ( @overlap_domains) { $dom->{evalue} = 1.0 unless defined($dom->{evalue}); } @overlap_domains = sort { $a->{evalue} <=> $b->{evalue} } @overlap_domains; $prev_dom = $overlap_domains[0]; } # $prev_dom should be the best of the overlaps, and we are no longer overlapping > dom_length/3 push @save_domains, $prev_dom; $prev_dom = $curr_dom; } if ($prev_dom) { push @save_domains, $prev_dom; } @{$pf_domains_r} = @save_domains; # now check for smaller overlaps for (my $i=1; $i < scalar(@{$pf_domains_r}); $i++) { if ($pf_domains_r->[$i-1]->{seq_end} >= $pf_domains_r->[$i]->{seq_start}) { my $overlap = $pf_domains_r->[$i-1]->{seq_end} - $pf_domains_r->[$i]->{seq_start}; $pf_domains_r->[$i-1]->{seq_end} -= int($overlap/2); $pf_domains_r->[$i]->{seq_start} = $pf_domains_r->[$i-1]->{seq_end}+1; } } } elsif ($split_over) { # here, everything that overlaps by > $min_vdom should be split into a separate domain my @save_domains = (); # where the new domains go # check to see if one domain is included (or overlapping) more # than xx% of the other. If so, pick the longer one my ($prev_dom, $curr_dom) = ($pf_domains_r->[0],0) ; for (my $i=1; $i < scalar(@{$pf_domains_r}); $i++) { $curr_dom = $pf_domains_r->[$i]; my ($prev_len, $cur_len) = ($prev_dom->{seq_end}-$prev_dom->{seq_start}+1, $curr_dom->{seq_end}-$curr_dom->{seq_start}+1); my $longer_len = ($prev_len > $cur_len) ? $prev_len : $cur_len; if (($curr_dom->{seq_start} >= $prev_dom->{seq_start}) && ($curr_dom->{seq_end} <= $prev_dom->{seq_end}) && $cur_len / $prev_len > 0.80) { # $prev_dom stays the same, $curr_dom deleted next; } elsif (($curr_dom->{seq_start} <= $prev_dom->{seq_start}) && ($curr_dom->{seq_end} >= $prev_dom->{seq_end}) && $prev_len / $cur_len > 0.80) { $prev_dom = $curr_dom; # this should delete $prev_dom next; } if ($prev_dom->{seq_end} >= $curr_dom->{seq_start} + $min_vdom) { my ($l_seq_end, $r_seq_start) = ($curr_dom->{seq_start}-1, $prev_dom->{seq_end}+1); $prev_dom->{seq_end} = $l_seq_end; push @save_domains, $prev_dom; my $new_dom = {seq_start => $l_seq_end+1, seq_end=>$r_seq_start-1, model_length => -1, pfamA_acc=>$prev_dom->{pfamA_acc}."/".$curr_dom->{pfamA_acc}, pfamA_id=>$prev_dom->{pfamA_id}."/".$curr_dom->{pfamA_id}, }; if ($pf_acc) { $new_dom->{info} = $new_dom->{pfamA_acc}; } else { $new_dom->{info} = $new_dom->{pfamA_id}; } push @save_domains, $new_dom; $curr_dom->{seq_start} = $r_seq_start; $prev_dom = $curr_dom; } else { push @save_domains, $prev_dom; $prev_dom = $curr_dom; } } push @save_domains, $prev_dom; @{$pf_domains_r} = @save_domains; } } # $vdoms -- virtual Pfam domains -- the equivalent of $neg_doms, # but covering parts of a Pfam model that are not annotated. split # domains have been joined, so simply check beginning and end of # each domain (but must also check for bounded-ness) # only add when 10% or more is missing and missing length > $min_nodom if ($vdoms && scalar(@{$pf_domains_r})) { my @vpf_domains; my $curr_dom = $pf_domains_r->[0]; my $length = $curr_dom->{length}; my $prev_dom={seq_end=>0, pfamA_acc=>''}; my $prev_dom_end = 0; my $next_dom_start = $length+1; for (my $dom_ix=0; $dom_ix < scalar(@{$pf_domains_r}); $dom_ix++ ) { $curr_dom = $pf_domains_r->[$dom_ix]; my $pfamA = $curr_dom->{pfamA_acc}; # first, look left, is there a domain there (if there is, # it should be updated right # my $min_vdom = $curr_dom->{model_length} / 10; if ($curr_dom->{model_length} < $min_vdom) { push @vpf_domains, $curr_dom; next; } if ($prev_dom->{pfamA_acc}) { # look for previous domain $prev_dom_end = $prev_dom->{seq_end}; } # there is a domain to the left, how much room is available? my $left_dom_len = min($curr_dom->{seq_start}-$prev_dom_end-1, $curr_dom->{model_start}-1); if ( $left_dom_len > $min_vdom) { # there is room for a virtual domain my %new_dom = (seq_start=> $curr_dom->{seq_start}-$left_dom_len, seq_end => $curr_dom->{seq_start}-1, info=>'@'.$curr_dom->{info}, model_length=>$curr_dom->{model_length}, model_end => $curr_dom->{model_start}-1, model_start => $left_dom_len, pfamA_acc=>$pfamA, ); push @vpf_domains, \%new_dom; } # save the current domain push @vpf_domains, $curr_dom; $prev_dom = $curr_dom; if ($dom_ix < scalar(@$pf_domains_r)-1) { # there is a domain to the right # first, give all the extra space to the first domain (no splitting) $next_dom_start = $pf_domains_r->[$dom_ix+1]->{seq_start}; } else { $next_dom_start = $length; } # is there room for a virtual domain right my $right_dom_len = min($next_dom_start-$curr_dom->{seq_end}-1, # space available $curr_dom->{model_length}-$curr_dom->{model_end} # space needed ); if ( $right_dom_len > $min_vdom) { my %new_dom = (seq_start=> $curr_dom->{seq_end}+1, seq_end=> $curr_dom->{seq_end}+$right_dom_len, info=>'@'.$curr_dom->{info}, model_length => $curr_dom->{model_length}, pfamA_acc=> $pfamA, ); push @vpf_domains, \%new_dom; $prev_dom = \%new_dom; } } # all done, check for last one # $curr_dom=$pf_domains_r->[-1]; # # my $min_vdom = $curr_dom->{model_length}/10; # my $right_dom_len = min($length - $curr_dom->{seq_end}+1, # space available # $curr_dom->{model_length}-$curr_dom->{model_end} # space needed # ); # if ($right_dom_len > $min_vdom) { # my %new_dom = (seq_start=> $curr_dom->{seq_end}+1, # seq_end => $curr_dom->{seq_end}+$right_dom_len, # info=>'@'.$curr_dom->{pfamA_acc}, # model_len=> $curr_dom->{model_len}, # pfamA_acc => $curr_dom->{pfamA_acc}, # model_start => $curr_dom->{model_end}+1, # model_end => $curr_dom->{model_len}, # ); # push @vpf_domains, \%new_dom; # } # @vpf_domains has both old @{$pf_domains_r} and new neg-domains @{$pf_domains_r} = @vpf_domains; } if ($neg_doms) { my @npf_domains; my $prev_dom={seq_end=>0}; for my $curr_dom ( @{$pf_domains_r}) { if ($curr_dom->{seq_start} - $prev_dom->{seq_end} > $min_nodom) { my %new_dom = (seq_start=>$prev_dom->{seq_end}+1, seq_end => $curr_dom->{seq_start}-1, info=>'NODOM'); push @npf_domains, \%new_dom; } push @npf_domains, $curr_dom; $prev_dom = $curr_dom; } if ($seq_length - $prev_dom->{seq_end} > $min_nodom) { my %new_dom = (seq_start=>$prev_dom->{seq_end}+1, seq_end=>$seq_length, info=>'NODOM'); if ($new_dom{seq_end} > $new_dom{seq_start}) { push @npf_domains, \%new_dom; } } # @npf_domains has both old @pf_domains and new neg-domains @{$pf_domains_r} = @npf_domains; } # now make sure we have useful names: colors for my $pf (@{$pf_domains_r}) { $pf->{info} = domain_name($pf->{info}, $pf->{pfamA_acc}); } } sub min { my ($arg1, $arg2) = @_; return ($arg1 <= $arg2 ? $arg1 : $arg2); } sub max { my ($arg1, $arg2) = @_; return ($arg1 >= $arg2 ? $arg1 : $arg2); } # domain name takes a uniprot domain label, removes comments ( ; # truncated) and numbers and returns a canonical form. Thus: # Cortactin 6. # Cortactin 7; truncated. # becomes "Cortactin" # sub domain_name { my ($value, $pfamA_acc) = @_; my $is_virtual = 0; if ($value =~ m/^@/) { $is_virtual = 1; $value =~ s/^@//; } # check for clan: if ($no_clans) { if (! defined($domains{$value})) { $domain_clan{$value} = 0; $domains{$value} = ++$domain_cnt; push @domain_list, $pfamA_acc; } } elsif (!defined($domain_clan{$value})) { ## only do this for new domains, old domains have known mappings ## ways to highlight the same domain: # (1) for clans, substitute clan name for family name # (2) for clans, use the same color for the same clan, but don't change the name # (3) for clans, combine family name with clan name, but use colors based on clan # check to see if it's a clan $get_pfam_clan->execute($pfamA_acc); my $pfam_clan_href=0; if ($pfam_clan_href=$get_pfam_clan->fetchrow_hashref()) { # is a clan my ($clan_id, $clan_acc) = @{$pfam_clan_href}{qw(clan_id clan_acc)}; # now check to see if we have seen this clan before (if so, do not increment $domain_cnt) my $c_value = "C." . $clan_id; if ($pf_acc) {$c_value = $clan_acc;} $domain_clan{$value} = {clan_id => $clan_id, clan_acc => $clan_acc}; if ($domains{$c_value}) { $domain_clan{$value}->{domain_cnt} = $domains{$c_value}; $value = $c_value; } else { $domain_clan{$value}->{domain_cnt} = ++ $domain_cnt; $value = $c_value; $domains{$value} = $domain_cnt; push @domain_list, $pfamA_acc; } } else { # not a clan $domain_clan{$value} = 0; $domains{$value} = ++$domain_cnt; push @domain_list, $pfamA_acc; } } elsif ($domain_clan{$value} && $domain_clan{$value}->{clan_acc}) { if ($pf_acc) {$value = $domain_clan{$value}->{clan_acc};} else { $value = "C." . $domain_clan{$value}->{clan_id}; } } if ($is_virtual) { $domains{'@'.$value} = $domains{$value}; $value = '@'.$value; } return $value; } sub domain_num { my ($value, $number) = @_; if ($value =~ m/^@/) { $value =~ s/^@/v/; $number = $number."v"; } return ($value, $number); } __END__ =pod =head1 NAME ann_pfam30_tmptbl.pl =head1 SYNOPSIS ann_pfam30_tmptbl.pl --neg-doms --vdoms 'sp|P09488|GSTM1_NUMAN' | accession.file =head1 OPTIONS -h short help --help include description --no-over : generate non-overlapping domains (equivalent to ann_pfam.pl) --split-over : overlaps of two domains generate a new hybrid domain --no-clans : do not use clans with multiple families from same clan --neg-doms : report domains between annotated domains as NODOM (also --neg, --neg_doms) --vdoms : produce "virtual domains" using model_start, model_end for partial pfam domains --min_nodom=10 : minimum length between domains for NODOM --host, --user, --password, --port --db : info for mysql database =head1 DESCRIPTION C extracts domain information from the pfam msyql database. Currently, the program works with database sequence descriptions in several formats: >gi|1705556|sp|P54670.1|CAF1_DICDI >sp|P09488|GSTM1_HUMAN >sp:CALM_HUMAN C uses the C, C, and C tables of the C database to extract domain information on a protein. If the C<--no-over> option is set, overlapping domains are selected and edited to remove overlaps. For proteins with multiple overlapping domains (domains overlap by more than 1/3 of the domain length), C selects the domain annotation with the best C. When domains overlap by less than 1/3 of the domain length, they are shortened to remove the overlap. If the C<--split-over> option is set, if two domains overlap, the overlapping region is split out of the domains and labeled as a new, virtual-lie, domain. If one domain is internal to another and spans 80% of the domain, the shorter domain is removed. C is designed to be used by the B programs with the C<-V \!ann_pfam30_tmptbl.pl> or C<-V "\!ann_pfam30_tmptbl.pl --neg"> option. C requires an additional database, C, with C, C, and C